【问题标题】:Linux read() minimum data amountLinux read() 最小数据量
【发布时间】: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)。

标签: c linux unix


【解决方案1】:

没有最小值,除非在块模式设备上,最小值是块大小。

你应该经常检查返回值;事情可能会破裂,您应该为破裂做好计划并适当地处理短读取和错误,而不是假设对方总是完美的。

【讨论】:

  • 即使从块设备读取时,你也可以读取少量,只是操作系统会从底层设备读取整个块,但不会将所有数据返回给你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
相关资源
最近更新 更多