私はUnixでのネットワークプログラミングについて学び、現在、ソケットとファイル記述子の概念を理解しようとしています。私が理解したことから、ファイル記述子は単にポインターの配列(ファイル記述子テーブル?)内の位置であり、これらのポインターはメモリ内のどこかのファイルを指します。
ソケット記述子はこの配列をファイル記述子と共有しますが、ポインターは代わりにソケットを参照します。それとも、ソケットにのみ使用されるものはありますか?
この配列はすべてのアプリケーション/プロセスに固有ですか?
私はUnixでのネットワークプログラミングについて学び、現在、ソケットとファイル記述子の概念を理解しようとしています。私が理解したことから、ファイル記述子は単にポインターの配列(ファイル記述子テーブル?)内の位置であり、これらのポインターはメモリ内のどこかのファイルを指します。
ソケット記述子はこの配列をファイル記述子と共有しますが、ポインターは代わりにソケットを参照します。それとも、ソケットにのみ使用されるものはありますか?
この配列はすべてのアプリケーション/プロセスに固有ですか?
はい、ソケットはファイルと同じテーブルへのインデックスでもあります。read
少なくともUNIXシステム(LinuxやOSXなど)では、Windowsが異なります。そのため、たとえば、write
データの送受信には使用できません。
各プロセスには、独自の「ファイル」記述子テーブルがあります。
ソケットは、UNIXオペレーティングシステムのファイルに他なりません。UNIXオペレーティングシステムでは、すべてがファイルとして扱われます。ソケットを作成するときはいつでも、標準I/Oと標準エラーおよびその他の詳細を含むファイル記述子テーブルにエントリが作成されます。ファイル記述子は、実行するアクション(読み取り、書き込みなど)に関する情報を含むファイルテーブルへのポインターとして機能し、その特定のファイルのiノードテーブルへのポインターを含みます。ご存知のとおり、iノードには必要なものがすべて含まれています。ファイルのdeatils。
ソケット(記述子)とファイル記述子の間に違いはありません。ソケットは単なる特殊な形式のファイルです。たとえば、ファイル記述子で使用されるソケット記述子で同じシステムコールread()およびwrite()を使用できます。
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
send()とwrite()の唯一の違いは、 flags引数の存在です。フラグ引数がゼロに等しい場合、send()はwrite( )と同等です。