我编写了一个程序来获取命令行参数,例如ls
,cat
并执行它们。现在我需要扩展这个程序以进行i / o重定向并执行shell管道。
这是我的简单shell程序。
if ((pid = fork()) == -1 ) { /* error exit - fork failed */
perror("Fork failed");
exit(-1);
}
if (pid == 0) { /* this is the child */
printf("This is the child ready to execute: %s\n",argv[1]);
execvp(argv[1],&argv[1]);
perror("Exec returned");
exit(-1);
} else {
wait(pid,0,0);
printf("The parent is exiting now\n");
...
}
我不知道如何在同一个程序中添加管道和重定向!
dup(pipeID[0]);
close(pipeID[0]);
close(pipeID[1]);
execlp(argv[3],argv[3],argv[4],0);
我知道我必须使用dup()
或dup2()
进行重定向,pipe()
也是如此,但我如何在同一个程序中一起完成?
答案 0 :(得分:1)
有很多SO问题可以解决部分或全部问题。 SO搜索缓冲区中更相关的搜索词是[c] [shell]
(标记shell和C)。问题包括:
如果你努力尝试,你可能会想出更好的选择。
您需要解决许多问题:
sort file1 file2 | uniq -c | sort -n
,哪个进程或进程是父shell要等待的?他们都是?