【发布时间】:2017-11-18 21:43:12
【问题描述】:
不明白为什么execl-command中的程序没有得到父进程的输入:
我的代码:(我删除了错误处理和其他一些步骤以使其更简单)
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int pipefd[2];
pipe(pipefd);
pid_t pid = fork();
switch(pid){
case -1:
exit(EXIT_FAILURE);
case 0:
close(pipefd[1]);
dup2(pipefd[0], STDIN_FILENO);
close(pipefd[0]);
execl("/usr/bin/wc", "-w", NULL);
fflush(stdout);
exit(EXIT_SUCCESS);
default:
close(pipefd[0]);
FILE *pipewrite = fdopen(pipefd[1], "w");
char *ar[] = {"W1", "W2", "W3", "W4", "W5"};
for(int i = 0; i < 5; i++){
fputs(ar[i], pipewrite);
fflush(pipewrite);
}
fflush(pipewrite);
fclose(pipewrite);
}
exit(EXIT_SUCCESS);
}
如果我启动程序,输出应该是 5。
【问题讨论】: