为什么socket()返回一个整数?

时间:2014-01-14 18:47:24

标签: c sockets

我知道socket()返回通信实例的句柄(整数1),就像文件描述符一样。

我认为(至少对我来说)如果它返回一个不透明的指针(如来自FILE*的{​​{1}})会更有意义,但是一个整数?实现如何使用此整数值来区分通信实例和另一个?

(同样的事情适用于fopen()我认为?)

1 个答案:

答案 0 :(得分:2)

  

实现如何使用此整数值来区分通信实例和另一个?

细节取决于实现,但可以安全地假设操作系统将文件句柄映射到适当的数据块。整数意味着什么无关紧要 - 它可以是数组的索引,随机选择的数字,用作标识符,或其他东西。代码中最重要的是数字代表特定的文件或套接字。

socket()返回的整数是file descriptor,即引用特定FILE数据结构的值。人们经常说Unix "everything is a file",因为文件系统被用作许多资源的接口,包括基于磁盘的文件,管道,打印机和终端等设备以及网络连接。创建新文件句柄的函数(例如open()accept()pipe()socket()应返回关联的文件描述符。