read(2)和write(2)既适用于套接字描述符,也适用于文件描述符。在文件描述符的情况下,用户文件描述符表->文件表,最后到inode表,在那里它检查文件类型(常规文件/字符/块),并相应地读取。对于char spl文件,它根据文件的主编号从char设备开关获取函数指针,并调用为该设备注册的适当读/写例程。类似地,通过从块设备开关获取函数指针,对块特殊文件调用适当的读/写例程。
你能让我知道当读/写调用套接字描述符时会发生什么吗?如果对套接字描述符执行读/写操作,我们不能使用open而不是socket来获取描述符吗?
发布于 2010-08-13 16:57:34
套接字描述符也与文件结构相关联,但是用于该结构的一组file_operations函数与通常的不同。因此,这些描述符的初始化和使用是不同的。读写内核级接口的一部分恰好是完全等价的。
发布于 2012-12-11 15:37:23
据我所知,在内存中,文件描述符将包含标识此fd的文件系统类型的标志。内核将根据文件系统类型调用相应的处理函数。你可以在linux内核中看到源代码read_write.c。
简而言之,内核做到了:
希望这个清楚,谢谢后城
发布于 2010-08-13 23:45:03
在某些状态下,读写对于某些类型的套接字是有效的;这都依赖于在内核中传递的各种结构。
原则上,open()可以创建套接字描述符,但BSD套接字API从未以这种方式定义过。
还有一些其他类型的文件描述符(有点特定于linux),它们是由系统调用打开的,而不是open(),例如epoll_create或timerfd_create。它们的工作原理是一样的。
https://stackoverflow.com/questions/3475200
复制相似问题