【发布时间】:2012-05-25 00:53:51
【问题描述】:
当我用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);
}
}
【问题讨论】:
-
在您的
ls | head示例中,unipipe 函数在哪里适合?祝你好运。 -
我有一个函数调用解析器,它将命令“ls | head”解析为两个字符指针数组:lhs 将是 {"ls", null},rhs 是 {"head", null }。感谢您的回复!