タグ

systemcallとreadに関するyukimori_726のブックマーク (2)

  • Linux システムコールのブロック・ノンブロックまとめ

    はじめに Linux にはブロックするシステムコールとノンブロックなシステムコールがあります。さて、システムコールが「ブロックする」とはどういうことでしょうか。よく、ブロックするシステムコールとは「処理が完了するまでプロセスの動作が中断され待たされること」という説明を見ますが、より詳細に、どういう処理の場合に待たされるのか、整理してみましょう。 「ブロックする」とは Linux において、システムコールがブロックするとは、「プロセスが、システムコール呼び出しの延長で待状態(TASK_INTERRUPTIBLE or TASK_UNINTERRUPTIBLE) に遷移し、CPU時間を消費せずにあるイベントが完了するのを待つようになる」、ことを指します。ブロックするシステムコールのうち代表的なものと、完了待ち対象イベントをまとめると、以下のようになります。 システムコール待ち対象イベント re

  • C言語システムコール-write CapmNetwork

    C言語システムコール-write writeシステムコール 概要 writeはファイルディスクリプタが示すファイルに対してバッファ(buf)のデータを指定バイト数(count)書き込みます。 writeはreadと異なり、戻り値として得られる実際の書き込みバイト数が指定バイト数より少なくなる可能性は低いといえます。 writeの注意点 writeシステムコールで書き込んだデータは、直ちにディスクに反映されるわけではありません。 writeで書き込んだ内容は、一旦カーネルのバッファへ格納され、カーネルの判断でシステムに余裕がある状態の時に実際に書き込み処理を行います。 そのため、データが書き込まれるタイミングや実際に書き込まれたかどうかを知ることは困難です。 この問題を回避するために、sync()やfsync()という関数があります。 syncを呼び出すと、バッファキャッシュ中の更新されたデ

  • 1