我正在編寫一個簡單的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的問題有好幾十個,也許你應該使用搜索功能。 –