gpt4 book ai didi

linux - 套接字描述符与文件描述符

转载 作者:IT王子 更新时间:2023-10-28 23:59:36 25 4
gpt4 key购买 nike

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

能否请您告诉我在套接字描述符上调用读/写时到底发生了什么。如果读/写对套接字描述符起作用,我们不能使用 open 而不是套接字来获取描述符吗?

最佳答案

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

简而言之,内核做了:

  1. 在read-write.c中有一个file_system_wrapper函数,根据fd的文件类型(ext2/ext3/socket/..)调用相应的handler函数
  2. 在socket.c中,有一个socket_type_wrapper函数;调用相应的套接字处理函数取决于套接字的类型(ipv4、ipv6、atm 其他)
  3. 在socket_ipv4.c中,有一个protocol_type包装函数;调用相应的协议(protocol)处理函数取决于协议(protocol)tpye (udp/tcp)
  4. 在 tcp_ip4.c 中;有tcp_sendmsg,写入tcp ipv4类型的FD时会调用该函数。

希望这个清楚,谢谢,后城

关于linux - 套接字描述符与文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3475200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com