创建function to grab stdin, stdout & stderr后,我想测试一下..
这是测试代码:
int fd[3];
char *buf = calloc(200, sizeof(char));
FILE *stream;
pid_t pid;
pid = opencmd(fd, "/bin/echo", (char *[]){"/bin/echo", "hello!"});
stream = fdopen(fd[2], "r");
while (fgets(buf, 200, stream) != NULL)
printf("stderr: %s\n", buf);
fclose(stream);
stream = fdopen(fd[1], "r");
while (fgets(buf, 200, stream) != NULL)
printf("stdout: %s\n", buf);
fclose(stream);
free(buf);
closecmd(pid, fd);
这无法按预期工作。我花了一个小时调试,无法设法跟踪问题,但据我设法,我意识到使用fdopen
开始使用描述符的流不起作用(由于某种原因),但使用直接使用文件描述符(例如write(2)
& read(2)
)的函数可以正常工作。
可能的原因是什么?
答案 0 :(得分:0)
此摘录:(char * []){" / bin / echo"," hello!"});缺少最后的NULL参数 - user3629249