【发布时间】:2012-04-15 09:13:23
【问题描述】:
在 Linux 中使用 read() 系统调用从任何源(文件、套接字、管道)读取时,是否有可以返回的最小数据量(在阻塞模式下)?或者系统调用甚至可以返回 1 个字节?
当我想从管道中读取单个 int(4 或 8 个字节)时,是否还需要检查 read() 的返回值,以查看我收到的是否小于 sizeof(int) 个字节?
【问题讨论】:
-
在实践中,对每个字或字节执行一个
read(2)系统调用效率不高。您应该缓冲您的读取(缓冲大小为例如 1K - 128K 字节),或使用库(例如<stdio.h>和fread)为您进行缓冲。 -
我想将它用于 IPC,我只需要将一个 int 发送到另一个进程。
-
但你仍然可以阅读更多。在某些情况下,您可能会多次读取 int (例如,如果您的进程没有足够频繁地调度,因为系统太忙,和/或其他写入进程正在快速将数据溢出到管道)。
-
在我的场景中,进程 A 向 B 发送一个 int 并 等待 响应,这也是一个 int。管道上的进程 B read()s 并期望一个 int,进行一些处理并发送结果(一个 int)。