IO, 文件描述符, socket 相关疑惑

近期准备看看 网络编程 相关的内容, 最初想从IO开始了解, 并且了解到了 用户空间,内和空间, 标准IO, 文件IO 的相关的比较基础的知识, 明白了 标准IO在用户区有缓存, 而文件IO在用户区没有缓存 (内核区是都有缓存)

但显然自己还是太小白了

接下来, 在了解 文件描述符 相关知识时便有了疑问1 :
网络上有说 文件描述符 是 内核空间 的 PCB进程控制块里面的结构体中有个文件描述符表, 并说 文件描述符表是在内核空间的; 但也有人说文件描述符表是用户空间的, 此处没有想太明白, 到底是哪儿的?

疑问2:
看到socket套接字也是有文件描述符的, 问题是, 在linux上, 一些IO设备如终端,键盘,貌似都能找到对应的文件, 并且直接对文件进行写入就可以看到效果, 证明确实是在对文件操作,有文件描述符也就说的过去
但是socket网络编程时, 既然也有文件描述符, 正如linux说的一切皆文件, 那网卡不也应该有对应的文件么? 但确实没找到, 比较疑惑?

疑问3:
文件描述符 指向的是儿, 内核缓冲区么, 是从内核缓冲区读信息么?
这块只知道标准IO读取文件时, 会经过内核缓冲区和用户缓冲区, 不知道文件描述符在这儿是个什么角色

疑问4:
如果网卡设备没有对应文件的话, socket套接字对应的文件描述符, 是直接指向....内核缓冲区? 还是网络通道?

疑问4:
socket所说的缓冲区, 指的是哪部分的缓冲区, 是内核缓冲区, 用户空间缓冲区, 还是网卡设备上的缓冲区?

完全懵逼, 不知道哪里看资料, 疑问太多了

阅读 3k
1 个回答

疑问3: 文件描述符 / fd只是个整数,你可以想成是某个数组的索引

疑问2: 一个fd对应的是 被进程打开的 可读写的东西,比如 open / listen 的返回值。/dev/ 那些有文件名的东西不是文件描述符

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进