0

コマンドをシミュレートしようとして いるときに、ユーザーからの特定のコマンドが失敗した場合、問題のある出力bashと呼ばれるファイルに書き込む必要もあります。errors.log

間違った入力をいくつか入力しようとしましたが、必要なファイルが期待どおりに更新されません。

ここに がありmain ます。これは多くのコードですが、変数のそれぞれについて疑問がある場合は、 main 全体を入れます。main の実際のアクションは、fork と、コードの一番下にhandleSonProcessあるメソッドの呼び出しで行われます。

#define BUFFER 4096
#define BUFFER2 1024
#define RUN_FOREVER 1
#define ERROR_SIGN -1
#define TRUE 1
#define FALSE 0

入力でコードを実行するとls ddddx 、出力は次のようになります。

ls: cannot access ddddx: No such file or directory

その出力をファイルに書き込みたいのですerrors.logが、書き込まれません。

どうしたの ?

ありがとう

編集

errorFile = open("errors.log",O_WRONLY | O_TRUNC | O_CREAT,0600);

// open errors file
// if(errorFile <= 0)
{
    sprintf(errorStr,"open: %s\n",strerror(errno));
    write(errorFile,errorStr,strlen(errorStr));
    fflush(stdout);
    perror("open");
    close(errorFile);
    return 0;
}
4

1 に答える 1

0

メッセージを error.log (より正確には、そのファイル ポインター) に書き込んだ後、すぐに fflush () でフラッシュします。また、プログラムを終了する前に、必ず閉じてください。

main() にいるので、終了 (EXIT_FAILURE) する代わりにエラー値を返して返すことを検討することもできます。

確かではありませんが、ファイル ポインタに何かを書き込んで表示されない場合は、おそらくバッファリングされているためです。また、即時終了では、プログラムが正常に終了しない場合があります。fflush、fclose、および exit の代わりに return の 3 つすべてを実行してみてください。それが機能するかどうかを確認してください...

于 2012-05-24T06:37:05.583 に答える