read(2)和write(2)既适用于套接字描述符也适用于文件描述符。在文件描述符,用户文件描述符表 - >文件表的情况下,最后到它检查文件类型(常规文件/字符/块)的inode表中,并相应地读取。在char spl文件的情况下,它会根据char设备开关中的文件主编号获取函数指针,并调用为该设备注册的相应读/写例程。 通过获取块设备开关中的函数指针,为块特殊文件调用类似适当的读/写例程。套接字描述符与文件描述符
请让我知道当在套接字描述符上调用read/write时会发生什么。如果读/写在套接字描述符上工作,我们不能使用open而不是套接字来获取描述符?
不能告诉你确切** **发生了什么(试着看内核源代码,如果你真的想知道),但本质上它会通过该请求将传递给TCP驱动程序,该驱动程序会将其传递到网络堆栈的下方,直到它到达网络接口卡的驱动程序。如果您想知道网络堆栈的每个层面通常会做什么,请查看* OSI模型*。至于'open'和'socket':它们有不同的参数,因为需要指定的信息因打开文件或套接字而不同。 – David 2010-08-13 08:53:36
我想知道在调用socket()时分配的数据结构是什么,在inode表中存储了什么信息,它在调用读/写时如何最终到达网络接口卡驱动程序例程 – 2010-08-13 10:02:52
说明read/write包装系统调用。大部分工作都是在内核空间完成的。 这是一种抽象,或“虚拟化”:只需将块文件,套接字或许多其他内容作为“文件”。一个文件具有读,写,打开等操作。但是在内核中定义读取套接字或读取磁盘文件的真正实现。如果需要,甚至可以定义从文件中读取的“写入”。 – tristan 2010-08-24 14:00:02