IO, 文件描述符, socket 相关疑惑
近期准备看看 网络编程 相关的内容, 最初想从IO开始了解, 并且了解到了 用户空间
,内和空间
, 标准IO
, 文件IO
的相关的比较基础的知识, 明白了 标准IO
在用户区有缓存, 而文件IO
在用户区没有缓存 (内核区是都有缓存)
但显然自己还是太小白了
接下来, 在了解 文件描述符
相关知识时便有了疑问1 :
网络上有说 文件描述符 是 内核空间 的 PCB进程控制块里面的结构体中有个文件描述符表, 并说 文件描述符表是在内核空间的; 但也有人说文件描述符表是用户空间的, 此处没有想太明白, 到底是哪儿的?
疑问2:
看到socket套接字也是有文件描述符的, 问题是, 在linux上, 一些IO设备如终端,键盘,貌似都能找到对应的文件, 并且直接对文件进行写入就可以看到效果, 证明确实是在对文件操作,有文件描述符也就说的过去
但是socket网络编程时, 既然也有文件描述符, 正如linux说的一切皆文件, 那网卡不也应该有对应的文件么? 但确实没找到, 比较疑惑?
疑问3:
文件描述符 指向的是儿, 内核缓冲区么, 是从内核缓冲区读信息么?
这块只知道标准IO读取文件时, 会经过内核缓冲区和用户缓冲区, 不知道文件描述符在这儿是个什么角色
疑问4:
如果网卡设备没有对应文件的话, socket套接字对应的文件描述符, 是直接指向....内核缓冲区? 还是网络通道?
疑问4:
socket所说的缓冲区, 指的是哪部分的缓冲区, 是内核缓冲区, 用户空间缓冲区, 还是网卡设备上的缓冲区?
完全懵逼, 不知道哪里看资料, 疑问太多了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
疑问3: 文件描述符 / fd只是个整数,你可以想成是某个数组的索引
疑问2: 一个fd对应的是 被进程打开的 可读写的东西,比如 open / listen 的返回值。/dev/ 那些有文件名的东西不是文件描述符