2014-12-05 71 views
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))工作正常。

這可能是什麼原因造成的?

+0

我不熟悉'opencmd()'。據我所知,它在任何地方都不是標準化的,所以誰知道它會做什麼?至於'fdopen()',如果它返回非NULL,那麼你應該期望能夠使用它提供的流。否則,會設置「errno」來指示失敗的性質。如果你想要更具體的分析,那麼它將有助於給我們更具體的解釋「不起作用」。 – 2014-12-05 20:25:30

+0

@JohnBollinger:'opencmd()'是我創建的一個實用程序函數,用於自動執行我通常的管道工作(點擊鏈接查看它的作用)。至於分析,測試代碼不能正確讀取文件描述符。 – 2014-12-05 21:52:18

+0

這段摘錄:(char * []){「/ bin/echo」,「hello!」});缺少最終的NULL參數 – user3629249 2014-12-06 00:49:32

回答

0

這段摘錄:(char * []){「/ bin/echo」,「hello!」});缺少最終的NULL參數 - user3629249