read(2)和write(2)可同时适用于套接字描述符和文件描述符。对于文件描述符,它会先访问用户文件描述符表->文件表,最后到inode表中检查文件类型(普通文件/字符设备/块设备),并相应地进行读取。对于字符特殊文件,它会从字符设备开关中获取基于文件主设备号的函数指针,并调用为该设备注册的适当的读写例程。 类似地,从块设备开关获取函数指针,将为块特殊文件调用适当的读/写例程。
当在套接字描述符上调用read/write时,您能否告诉我实际发生了什么。如果read/write适用于套接字描述符,我们为什么不能使用open来获取描述符呢?
当在套接字描述符上调用read/write时,数据被发送到网络或者从网络接收,并且传输的数据是按照协议进行封装的。open系统调用不包含任何这样的语义,因此无法用于套接字。要获得套接字描述符,需要调用socket系统调用。