【发布时间】:2015-04-14 14:03:06
【问题描述】:
当我们在Linux上调用read(fd, buf, count)时,系统(函数)调用的返回值除了到文件末尾的字节数较少的情况外,是否可以小于count?
我在手册页上查了一下,上面写着
"成功时,返回读取的字节数(零表示文件结束),文件位置由此前进
数字。如果此数字小于请求的字节数,则不是错误;例如,这可能会发生
因为现在实际上可用的字节更少(可能是因为我们接近文件结尾,或者因为我们正在阅读
来自管道或终端),或因为 read() 被信号中断。”
所以这是我的问题:
普通文件上的read() 怎么会被信号打断?通过什么可能的信号?
【问题讨论】:
-
它不应该是
open(fd, buf, count)... :-) -
为 SIGINT 实现信号处理程序,然后发送 SIGINT
-
您可以发送
SIGINT到某个软挂载的NFS 文件读取。 -
请注意,如果您考虑 count 的小值而不是大值,这是一个更有趣的问题。
-
即使一个特定的内核确实保证它不会返回更少的数据,你为什么要做出这样的假设?
read()函数为您提供返回的字节数。用它。当一个函数返回一个值或一个可能的错误代码时,就像它可能返回任何东西一样进行编码。不要假设任何事情。
标签: c linux system-calls