C Linux read()最小数据量

C Linux read()最小数据量,c,linux,unix,C,Linux,Unix,在Linux中使用read()syscall从任何源(文件、套接字、管道)读取数据时,是否存在可以返回的最小数据量(在阻塞模式下)?或者系统调用甚至可以返回1字节 当我想从管道中读取单个int(4或8个字节)时,是否仍需要检查read()的返回值以查看接收到的字节是否小于sizeof(int)字节?没有最小值,除非在块模式设备上,最小值是块大小 您应该始终检查返回值;事情可能会破裂,你应该做好破裂的计划,适当地处理短读和错误,而不是假设另一面总是完美的。即使从块设备上读取数据,你也可以读取较少的

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


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

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


您应该始终检查返回值;事情可能会破裂,你应该做好破裂的计划,适当地处理短读和错误,而不是假设另一面总是完美的。

即使从块设备上读取数据,你也可以读取较少的数据量,只是操作系统会从底层设备读取整个块,但不会将所有数据返回给你。实际上,对每个字或字节执行一次
read(2)
syscall是没有效率的。您应该缓冲您的读取(缓冲区大小为1K-128K字节),或者使用库(例如
fread
)为您进行缓冲。我想将其用于IPC,在IPC中,我只需要将一个int发送到另一个进程。但您仍然可以读取更大的量。在某些情况下,您可能需要读取一次以上的int(例如,由于系统太忙,您的进程没有安排足够的时间,和/或其他写入进程正在快速将数据溢出到管道中)。在我的场景中,进程a向B发送一个int并等待响应,这也是一个int。进程B read()s在管道上,并期望一个int,执行一些处理并发送一个结果(一个int)。