パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Hello, Worldに潜むバグ」記事へのコメント

  • by Anonymous Coward

    ・C言語の高水準入出力 printf(3) とか fputs(3) で出力した内容はキャッシュされるので fclose(3) とか fflush(3) とかで吐き出して戻り値を確認しないと正常に出力されたことは保証されない。
    ・exit(3) なり main() からの return で暗黙にフラッシュした場合はエラーチェックできないので、失敗してもわからない。

    というのは基本仕様なので知っとく必要がある。
    /dev/full とかだけでなく、write(2)で発生するあらゆるエラーの可能性がある。

    • Re: (スコア:2, 興味深い)

      by Anonymous Coward

      C言語の仕様と離れるけど補足しておくと、書き込み先が NFS のような場合にはカーネルが遅延書き込みをするので fflush(3) が成功したとしてもまだ十分ではない。
      あとから遅延してエラーが帰ってくるかもしれないので fclose(3) の戻り値を確認するまでは安心できない。

      別件としてカーネル内にもページキャッシュがあるので、ディスクドライブへ書き込みされたことを保証したいなら fsync() なり sync() なりを検討する必要もある。

      • by Anonymous Coward

        > 別件としてカーネル内にもページキャッシュがあるので、ディスクドライブへ書き込みされたことを保証したいなら fsync() なり sync() なりを検討する必要もある。

        つまり書き込み保証を移植性のある方法で行うことは不可能

Stay hungry, Stay foolish. -- Steven Paul Jobs

処理中...