[英]C pipe, fork, dup, and exec()
I'm trying to pass list of strings through pipe to child process where it should display through /bin/cat
using execl()
. 我正在尝试通过管道传递字符串列表到子进程,它应该通过/bin/cat
使用execl()
。 I had it working earlier except that the pipe did not close so the program kept waiting. 我之前有工作,除了管道没有关闭所以程序一直在等待。 Don't know what I did and now it is not working at all. 不知道我做了什么,现在根本不工作。 Can someone see my code and tell me what am I doing wrong that the str
data is not being displayed by cat in child process? 有人可以看到我的代码并告诉我,我在做什么错误,在子进程中cat没有显示str
数据吗?
int main(int argc, char** argv) {
char *str[] = {"The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"};
int fds[TOTAL_CHILDREN];
int writeFds;
int catPID;
int status;
FILE * write_to_child;
//create pipe
if (pipe(fds) == -1) {
perror("creating pipe: failed");
exit(EXIT_FAILURE);
}
pipe(fds);
//create subprocess for cat child
switch (catPID) {
case 0: // successful creation of child
close(fds[1]); //close write side from parents
close(0); //close stdin
dup(fds[0]); //connect pipe from execl cat to stdin
execl("/bin/cat", "cat", (char *) 0);
perror("exec failed!");
exit(20);
break;
case -1: //failure
perror("fork failed: cat process");
exit(EXIT_FAILURE);
default: //parent process
close(fds[0]);
writeFds = fds[1];
write_to_child = fdopen(fds[1], "w");
if (write_to_child == NULL) {
perror("write to pipe failed");
exit(EXIT_FAILURE);
}
break;
}
int i;
for (i = 0; i < 9; i++){
fprintf(write_to_child, "%s\n", str[i]);
}
fclose(write_to_child);
close(writeFds);
wait(&status);
return (EXIT_SUCCESS);
}
You probably want to add the line 您可能想要添加该行
catPID = fork();
and I'm not sure why you've got pipe(fds)
twice 而且我不确定为什么你有两次pipe(fds)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.