标准流管道测试失败

时间:2014-12-05 18:35:30

标签: c stream pipe file-descriptor

创建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))的函数可以正常工作。

可能的原因是什么?

1 个答案:

答案 0 :(得分:0)

此摘录:(char * []){" / bin / echo"," hello!"});缺少最后的NULL参数 - user3629249