0
創建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)
)工作正常。
這可能是什麼原因造成的?
我不熟悉'opencmd()'。據我所知,它在任何地方都不是標準化的,所以誰知道它會做什麼?至於'fdopen()',如果它返回非NULL,那麼你應該期望能夠使用它提供的流。否則,會設置「errno」來指示失敗的性質。如果你想要更具體的分析,那麼它將有助於給我們更具體的解釋「不起作用」。 – 2014-12-05 20:25:30
@JohnBollinger:'opencmd()'是我創建的一個實用程序函數,用於自動執行我通常的管道工作(點擊鏈接查看它的作用)。至於分析,測試代碼不能正確讀取文件描述符。 – 2014-12-05 21:52:18
這段摘錄:(char * []){「/ bin/echo」,「hello!」});缺少最終的NULL參數 – user3629249 2014-12-06 00:49:32