【发布时间】:2012-04-19 10:36:21
【问题描述】:
调用 read 后实际发生的情况:
n = read(fd, buf, try_read_size);
这里的 fd 是一个 TCP 套接字描述符。 buf 是缓冲区。 try_read_size 是程序尝试读取的字节数。
我猜这最终可能会调用内核的系统调用。但是谁能提供一些细节?说glibc中的源码实现还是内核源码?
【问题讨论】:
-
内核细节对于简短的 SO 答案来说太复杂了。顺便说一句,你为什么不自己检查一下?
-
@KarolyHorvath 我试过但完全迷路了。有什么方向或建议来获取详细信息吗?我将不胜感激。
-
从 linux 内核源代码读取 fs/read_write.c 看看发生了什么。
-
这只是通用的读取功能,不是吗? TCP 相关的东西必须在 net/ 某处。
-
@strkol 谢谢!我找到“SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)”(lxr.linux.no/#linux+v3.3.2/fs/read_write.c#L460)。深入研究其中的代码。
标签: linux sockets networking