当前位置:  开发笔记 > 运维 > 正文

socket descriptor vs file descriptor

如何解决《socketdescriptorvsfiledescriptor》经验,为你挑选了1个好方法。

read(2) and write(2) works both on socket descriptor as well as on file descriptor. In case of file descriptor, User file descriptor table->file table and finally to inode table where it checks for the file type(regular file/char/block), and reads accordingly. In case of char spl file, it gets the function pointers based on the major number of the file from the char device switch and calls the appropriate read/write routines registered for the device. Similarly appropriate read/write routine is called for block special file by getting the function pointers from the block device switch.

你能不能让我知道在套接字描述符上调用read/write时会发生什么.如果读取/写入对套接字描述符起作用,我们不能使用open而不是socket来获取描述符?



1> Houcheng..:

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

简而言之,内核做了:

    在read-write.c中,有一个file_system_wrapper函数,调用相应的处理函数依赖于fd的文件类型(ext2/ext3/socket/..)

    在socket.c中,有一个socket_type_wrapper函数; 调用相应的套接字处理函数取决于套接字的类型(ipv4,ipv6,atm其他)

    在socket_ipv4.c中,有一个protocol_type包装函数; 调用相应的协议处理函数取决于协议tpye(udp/tcp)

    在tcp_ip4.c中; 有tcp_sendmsg,当写入tcp ipv4类型的FD时会调用此函数.

希望这清楚,谢谢,厚城

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有