【发布时间】:2013-01-25 22:41:06
【问题描述】:
有人可以向我解释为什么这会产生正常行为(ls | cat)
int fd[2]; pipe(fd);
pid_t pid = fork();
if(pid > 0) {
close(fd[0]);
close(STDOUT_FILENO);
dup2(fd[1],STDOUT_FILENO);
execlp("ls","ls",NULL);
} else if (pid == 0) {
close(fd[1]);
close(STDIN_FILENO);
dup2(fd[0],STDIN_FILENO);
execlp("cat","cat",NULL);
} else {
error(1, errno, "forking error");
}
但是当我将 execlp 更改为 execvp 突然没有任何输出并且退出状态为 255?代码:
int fd[2]; pipe(fd);
pid_t pid = fork();
if(pid > 0) {
close(fd[0]);
close(STDOUT_FILENO);
dup2(fd[1],STDOUT_FILENO);
char **args = {"ls", NULL};
execvp("ls",args);
} else if (pid == 0) {
close(fd[1]);
close(STDIN_FILENO);
dup2(fd[0],STDIN_FILENO);
char **args = {"cat", NULL};
execvp("cat",args);
} else {
error(1, errno, "forking error");
}
我真的很想使用 execvp,因为我将执行带有可变长度 arg 列表的命令。非常感谢您的帮助。
【问题讨论】:
-
您是否启用了所有编译器警告?!