2016-05-31 40 views
0

我試圖運行可執行使用此C代碼:Execv的Linux的printf不起作用

int main(int argc, char *argv[]) 
    { 
    printf("hello.\n"); 
    sleep(2); 
    if (execlp("ls","ls","-l",NULL) == -1) 
      printf("Error occured during execute ls.\n"); 
    return 0; 
} 

爲什麼的printf( 「你好\ n」) 不起作用?即使我睡覺?

+0

它適用於我。您在測試時是否重定向輸出? – Barmar

+0

我在終端執行它。 ls工作良好,但沒有「你好」打印 –

回答

1

當輸出到終端時,您的程序應該可以工作,但是如果輸出被重定向到文件或管道,它將無法正常工作。當stdout沒有連接到終端時,其輸出被完全緩衝。調用exec函數在用新程序替換當前進程之前不刷新緩衝區,因此任何緩衝輸出都很多。

致電fflush(stdout);致電execlp()之前應該解決問題。你不需要睡覺,它對輸出沒有影響。

#include <stdio.h> 
#include <unistd.h> 

int main(int argc, char *argv[]) 
    { 
    printf("hello.\n"); 
    fflush(stdout); 
    if (execlp("ls","ls","-l",NULL) == -1) 
      printf("Error occured during execute ls.\n"); 
    return 0; 
} 
+0

謝謝你的回答 –

+0

@ILyaShapira你可以接受答案,如果它解決了你的問題。 –

+0

你是什麼意思接受 –