25

私はUnixでのネットワークプログラミングについて学び、現在、ソケットとファイル記述子の概念を理解しようとしています。私が理解したことから、ファイル記述子は単にポインターの配列(ファイル記述子テーブル?)内の位置であり、これらのポインターはメモリ内のどこかのファイルを指します。

ソケット記述子はこの配列をファイル記述子と共有しますが、ポインターは代わりにソケットを参照します。それとも、ソケットにのみ使用されるものはありますか?

この配列はすべてのアプリケーション/プロセスに固有ですか?

4

3 に答える 3

26

はい、ソケットはファイルと同じテーブルへのインデックスでもあります。read少なくともUNIXシステム(LinuxやOSXなど)では、Windowsが異なります。そのため、たとえば、writeデータの送受信には使用できません。

各プロセスには、独自の「ファイル」記述子テーブルがあります。

于 2012-11-14T11:40:26.620 に答える
11

ソケットは、UNIXオペレーティングシステムのファイルに他なりません。UNIXオペレーティングシステムでは、すべてがファイルとして扱われます。ソケットを作成するときはいつでも、標準I/Oと標準エラーおよびその他の詳細を含むファイル記述子テーブルにエントリが作成されます。ファイル記述子は、実行するアクション(読み取り、書き込みなど)に関する情報を含むファイルテーブルへのポインターとして機能し、その特定のファイルのiノードテーブルへのポインターを含みます。ご存知のとおり、iノードには必要なものがすべて含まれています。ファイルのdeatils。

于 2016-01-09T13:12:03.550 に答える
6

ソケット(記述子)とファイル記述子の間に違いはありません。ソケットは単なる特殊な形式のファイルです。たとえば、ファイル記述子で使用されるソケット記述子で同じシステムコールread()およびwrite()を使用できます。

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

send()write()の唯一の違いは、 flags引数の存在です。フラグ引数がゼロに等しい場合、send()はwrite( )と同等です。

于 2018-11-20T16:32:14.653 に答える