2016-05-31 1 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

何を受け入れるのですか –