调用 read 后实际发生的情况:
n = read(fd, buf, try_read_size);
这里 fd 是一个 TCP 套接字描述符。buf 是缓冲区。try_read_size 是程序尝试读取的字节数。
我想这最终可能会调用内核的系统调用。但是谁能提供一些细节?说glibc或内核源代码中的源代码实现?
调用 read 后实际发生的情况:
n = read(fd, buf, try_read_size);
这里 fd 是一个 TCP 套接字描述符。buf 是缓冲区。try_read_size 是程序尝试读取的字节数。
我想这最终可能会调用内核的系统调用。但是谁能提供一些细节?说glibc或内核源代码中的源代码实现?
从高层次的角度来看,会发生以下情况:
buf
实际上buf+try_read_size
是fd
一个文件描述符)。如果出现问题,则会生成一个负错误代码(例如 -EFAULT),cpu 会切换回用户模式,并且调用会返回到包装器。proc
条目或更奇特的东西中读取)min(available, try_read_size)
则复制到buf
,将数量写入返回代码寄存器(x86 上的 EAX),cpu 切换回用户模式,调用返回到包装器。-EAGAIN
) 写入返回代码寄存器,cpu 切换回用户模式并且调用返回到包装器。