當我用ls | head
執行此函數時,在打印出文件和目錄後,它掛在第二個子進程中。有人能告訴我我在這裏想念什麼嗎?在此先感謝子進程掛在管道內
int unipipe(char* lhs[], char* rhs[])
{
int pfd[2];
int status, cid;
pid_t pid;
char buf;
if((lhs != NULL) && (rhs != NULL))
{
if(pipe(pfd) != 0)
{
perror("pipe");
return -1;
}
if((pid = fork()) < 0)
{
perror("fork");
return -1;
}
else if(pid == 0)
{
close(1); //close the unused read end
dup2(pfd[1], STDOUT_FILENO);
//execute the left-hand side command
close(pfd[0]);
execvp(lhs[0], lhs);
_exit(EXIT_SUCCESS);
}
if(setpgid(pid, 0) < 0)
{
perror("setpgid");
return -1;
};
cid = waitpid(pid, &status, 0);
if((pid = fork()) == 0)
{
close(0);
dup2(pfd[0], STDIN_FILENO);
close(pfd[1]); //close the unused write end
execvp(rhs[0], rhs);
_exit(EXIT_SUCCESS);
}
else
{
waitpid(pid, &status, 0);
}
}
函數unipipe在哪裏適合你的'ls | head'?祝你好運。 – shellter
我有一個函數調用解析器,它將命令「ls | head」解析爲兩個char指針數組:lhs將是{「ls」,null},rhs是{「head」,null}。感謝您的回覆! – jctank