私は最近 libev を学び始めたばかりなので、 a に読み取り/書き込み可能な概念があり、io_watcher
よく理解していません。私の知る限り、Linux システム プログラミングには次のパラメータがあります。
O_ASYNC
指定されたファイルが読み取り可能または書き込み可能になると、シグナル (デフォルトでは SIGIO) が生成されます。このフラグは、通常のファイルではなく、端末とソケットでのみ使用できます。
では、通常のファイルは読み取り/書き込みを気にしないため、ソケット プログラミングにおいて読み取り/書き込み可能とは実際には何を意味するのでしょうか? また、カーネルは、ソケット ファイル記述子が読み取り可能かどうかを調べるためにどのような手段を講じましたか?
すべてがファイルであるという哲学を考慮すると、異なる記述子番号を持つすべてのソケット記述子は、実際には同じファイルを指していますか? もしそうなら、同期が原因で読み取り/書き込みの問題が発生したと考えてよいですか?
OK、ばかげた質問をしたようです。私が本当に言いたいのは、ソケットと通常のファイルの両方がファイル記述子を介して読み書きできるということです。なぜソケット記述子には読み書き可能な概念があるのに、通常のファイルにはありません。EJP は、これはバッファーと各記述子が独自のバッファーのペアを取得したためであると私に言ったので、ここに私の結論があります: 読み取り/書き込み可能な概念はバッファー用であり、バッファーが空の場合は読み取り不能であり、バッファーがいっぱいの場合は書き込み不可です。読み取り可能および書き込み可能は同期とは関係がなく、通常のファイルにはバッファーがないため、常に読み取り可能および書き込み可能です。
さらに質問があります。受信バッファと言うと、このバッファは と同じではありませんint recv(SOCKET socket, char FAR* buf, int len, int flags);
よね?