套接字描述符基本上是文件描述符的同义词吗?

时间:2014-03-13 09:28:59

标签: file sockets unix networking

来自:http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html

  

因此,当您想通过Internet与其他程序通信时   你会通过文件描述符来做到这一点,你最好相信它。

     

“我从哪里获得这个用于网络通信的文件描述符,先生。   Smarty-Pants?“可能是你现在心中的最后一个问题,   但我还是要回答它:你打电话给socket()   系统例程。它返回套接字描述符,然后进行通信   通过它使用专门的send()和recv()(man send,man   recv)套接字调用。

     

“但是,嘿!”你可能正在大声说出来   现在。 “如果它是一个文件描述符,为什么以海王星的名义不能   只需使用正常的read()和write()调用即可进行通信   插座?“简短的回答是,”你可以!“答案越长,   “你可以,但send()和recv()可以更好地控制你的   数据传输。“

因为,socket是UNIX中不同进程之间的通信方式,

UNIX中不同进程之间的所有通信都是通过读写文件来完成的 和
文件描述符是一个唯一表示操作系统中打开文件的整数。

那么,套接字描述符基本上是文件描述符吗? OR是套接字描述符,基本上是两个程序之间已建立链接的唯一标识吗?

两者有什么区别?

1 个答案:

答案 0 :(得分:2)

这里有几个问题,但所有问题的答案都是一样的。在Unix,Linux等上,套接字描述符文件描述符。那是为什么你可以使用read()和write()以及close()。

在Windows上,它不是,你不能。