首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字描述符与文件描述符

套接字描述符与文件描述符
EN

Stack Overflow用户
提问于 2010-08-13 16:38:11
回答 3查看 27.7K关注 0票数 14

read(2)和write(2)既适用于套接字描述符,也适用于文件描述符。在文件描述符的情况下,用户文件描述符表->文件表,最后到inode表,在那里它检查文件类型(常规文件/字符/块),并相应地读取。对于char spl文件,它根据文件的主编号从char设备开关获取函数指针,并调用为该设备注册的适当读/写例程。类似地,通过从块设备开关获取函数指针,对块特殊文件调用适当的读/写例程。

你能让我知道当读/写调用套接字描述符时会发生什么吗?如果对套接字描述符执行读/写操作,我们不能使用open而不是socket来获取描述符吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-13 16:57:34

套接字描述符也与文件结构相关联,但是用于该结构的一组file_operations函数与通常的不同。因此,这些描述符的初始化和使用是不同的。读写内核级接口的一部分恰好是完全等价的。

票数 6
EN

Stack Overflow用户

发布于 2012-12-11 15:37:23

据我所知,在内存中,文件描述符将包含标识此fd的文件系统类型的标志。内核将根据文件系统类型调用相应的处理函数。你可以在linux内核中看到源代码read_write.c。

简而言之,内核做到了:

  1. 在read-write.c中,有一个file_system_wrapper函数,调用对应的handler函数依赖于fd的文件类型(ext2/ ext3/ socket/ .)
  2. 在socket.c中,有一个socket_type_wrapper函数,调用对应的socket handler函数依赖于socket的类型(ipv4,ipv6,atm
  3. )
  4. 在socket_ipv4.c中,有一个protocol_type wrapper函数,调用对应的协议处理器函数依赖于tcp_ip4.c中的协议tpye (udp/ tcp)
  5. ;存在tcp_sendmsg,当写入tcp ipv4类型的FD时,将调用此函数。

希望这个清楚,谢谢后城

票数 17
EN

Stack Overflow用户

发布于 2010-08-13 23:45:03

在某些状态下,读写对于某些类型的套接字是有效的;这都依赖于在内核中传递的各种结构。

原则上,open()可以创建套接字描述符,但BSD套接字API从未以这种方式定义过。

还有一些其他类型的文件描述符(有点特定于linux),它们是由系统调用打开的,而不是open(),例如epoll_create或timerfd_create。它们的工作原理是一样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3475200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档