调用read后实际发生了什么:
n = read(fd, buf, try_read_size);
这里fd是TCP套接字描述符。 buf是缓冲区。 try_read_size是程序尝试读取的字节数。
我想这可能最终会调用对内核的系统调用。但是有人能提供一些细节吗?说glibc或内核源代码中的源代码实现?
答案 0 :(得分:4)
从高层来看,这就是:
buf
到buf+try_read_size
是指可访问的内存页,fd
实际上是文件描述符)。如果出现问题,则会生成负错误代码(例如-EFAULT),cpu将切换回用户模式,并且调用将返回到包装器。proc
条目读取或更具异国情调的内容)min(available, try_read_size)
被复制到buf
,所述量被写入到返回码寄存器(EAX在x86)时,CPU切换回用户模式和调用返回包装器。-EAGAIN
)写入返回代码寄存器,cpu将切换回用户模式,并且调用将返回到包装器。