私の教科書ではこれについて言及していますが、具体的には定義しません。使用されるコンテキスト(この場合はパイプ)と見なされると、パイプの一端が彫刻、一時的に「無効化」(必要に応じて)データがキューに追加されますか?私がちょっと混乱する部分がまさにこの部分です。 「ブロック」したら(何でも)ブロックが解除されるのを待ってから、ブロック中に送信されたコンテンツを続行しますか?これは、彼らが「非ブロック」のときにすぐにエラーを返すと言うので、彼らが暗示しているようです(私の記憶が正しい場合)。正しい方向で説明したり、推進していただきありがとうございます。ありがとうございます!
(どのタグを使用すべきかわかりません)
答え1
ブロック呼び出しは、データが使用可能であり、そのデータを待っている場合に返され、非ブロック呼び出しはデータを返します。もし返すデータがあり、そうでない場合はデータがないことを示すエラーが返されます(ただし、常に呼び出し後に「すぐに」返されます)。
これらのいずれかを使用するかどうかは、実行する操作によって異なります。そのデータを取得したいが他に何もしない場合は、ブロック呼び出しを呼び出すだけです。しかし、まだデータがない場合は、別のことをしたい場合があります。
「データはありますか?」を意味するPOSIX Swiss Knifeも参照してください。select()
時間が設定されている複数のファイル記述子への呼び出しをブロックする呼び出しです(したがって、5分間入力がなければ返し、エラーを返すことができます)。
答え2
I / O操作がブロックされると、その操作を開始した関数/システム呼び出しは、適切な量のデータを読み書きするまでプロセス/スレッドに制御を返しません。