【发布时间】:2021-09-29 03:42:37
【问题描述】:
所以我的目标是在 C 中模仿终端中使用的管道 (|) 运算符。基本上我正在为左右参数制作管道。
在终端中运行是这样完成的;
./run ls : sort
“ls”会将数据通过管道传输到“排序”中。 ' : ' 用于表示左右参数。如果我只输入“./run ls :”或“./run ls”,它就可以工作,它会执行“ls”应该做的事情,包括参数,如果通过的话。
要将 argv 读取到“:”,我正在这样做:
int i;
char *command1[argc];
for (i = 0; i < argc; i++) {
if (strcmp(argv[i], ":") == 0) break;
command1[i] = argv[i];
}
那么,command1[1] 中的任何内容都将用于 execlp() 运行命令,该命令有效。
我的下一个问题是弄清楚如何从 argv 中读取以获取 " : " 之后所有内容的命令和参数。
我只是不确定如何读取 argv,然后将所有内容存储到冒号后退出的新数组中。
【问题讨论】:
-
command2 = argv[i+1];?或者,如果还有多个剩余命令,则在循环中执行此操作。或者您可以使用&argv[i+1]作为新的剩余命令数组。 -
您应该从
i = 1开始,因为argv[0]是程序名称,而不是参数。