2012-04-15 33 views
2

在Linux中使用read()系统调用来从任何源文件(文件,套接字,管道)读取时,是否存在可返回的最小数据量(处于阻塞模式)?或者系统调用甚至可以返回1个字节?Linux读取()最小数据量

当我想从管道读取一个int(4或8个字节)时,是否还需要检查read()的返回值以查看我是否收到小于sizeof(int)字节?

+0

实际上,对每个字或字节执行一次“读取(2)”系统调用效率不高。您应该缓冲您的读取(缓冲区大小为例如1K - 128K字节),或者使用库(例如''带有'fread'的'')为您做缓冲。 – 2012-04-15 09:32:26

+0

我想将它用于IPC,我只需要将一个int发送到另一个进程。 – kuba 2012-04-15 09:34:02

+0

但你仍然可以阅读更多的数量。可能有些情况下你会有不止一次int读取的情况(例如,如果你的过程没有足够的时间进行调度,因为系统太忙了,或者其他写入过程以很快的速度将数据泄漏到管道)。 – 2012-04-15 09:36:43

回答

5

没有最小值,除了块模式设备,其中最小值是块大小。

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

+2

即使从块设备读取数据时,您可以读取的数量也较少,只是操作系统会从底层设备读取整个数据块,但不会将所有数据都返回给您。 – 2012-04-15 09:30:46