我正在编写一个简单的shell,我想改变我的程序以添加多个管道命令的可能性,如“echo foo | cat | cat | cat | cat | wc”。我写了两个命令,但对于多个我不能。在C中创建多个管道
这里是我的程序的源代码:
if (pid == 0) // in the child process
{
for (i = 0; i < command; i++) // for each cmd
{
if (argv[i][0] == '|')
{
j = i;
}
}
if (j > 0)
{
if (pipe(p))
{
fprintf(stderr, "pipe");
exit(1);
}
argv[j] = NULL;
if (fork() == 0) // child
{
j = -1;
close(p[0]);
dup2(p[1],1);
close(p[1]);
}
// parent
close(p[1]);
dup2(p[0], 0);
close(p[0]);
}
for (i = 0; dirs[i] != 0; i++)
{
snprintf(pathname, sizeof(pathname), "%s/%s", dirs[i], argv[j+1]);
execv(pathname, &argv[j+1]);
}
}
else
{
while (wait(0) != pid) // parent: wait child
}
预先感谢您的帮助。
你想如何运行这个程序?它是否像'./myprog cmd1 | cmd2 | cmd3'等等? –
@ NTN不喜欢./myprog和放后命令像bash – Yoan15
“多个我不能”是不是一个适当的问题陈述。另外,在过去的几周里,关于可能参加同一个大学课程的人编写一个shell的问题有好几十个,也许你应该使用搜索功能。 –