当我们在Linux上调用read(fd,buf,count)的时候,系统(函数)调用的返回值是否可以小于文件结束字节less的情况。
我说,在手册页里查了一下
“成功时返回读取的字节数(零表示文件结束),文件位置按此数字提前,如果这个数字小于请求的字节数,则不是错误;这可能发生在例如因为现在实际上可用的字节更less(可能是因为我们接近文件结尾,或者因为我们正在从pipe道读取数据或从terminalread() ), 或者因为read()被信号中断 。
所以这里是我的问题:一个常规文件的read()如何被一个信号中断? 通过什么可能的信号?
Windows相当于暂停()系统调用?
将等待和waitpid块SIGCHLD并解除它在Linux中返回时?
没有findC中的getrandom系统调用
“系统调用参数打开(模式)包含未初始化的字节(S)”在打开系统调用
x86汇编:在Linux上进行系统调用之前,您应该保存所有寄存器吗?
如何使用写入系统调用将int写入文件并完全按照写入方式读取它们?
查看由Java程序所做的所有系统调用
打印在nasm中浮动,而不绑定到C函数
此文档页面指定哪些调用可以被信号中断,并且read()在列表中。 您必须在Linux中启用此行为(使用SA_RESTART ),默认情况下不启用。
是的, read()可以被信号中断。 但是,当进程正在从属于文件系统上的文件的描述符读取时。
当文件进程调用read() ,它进入一个所谓的不可中断的睡眠 。 在这种模式下,系统调用完成之前不会处理任何信号。 要么是因为某些错误,要么是在读取请求的数据时。
注意 :当进程处于不可中断的睡眠状态时,您甚至不能用SIGKILL信号终止进程。 换句话说, kill $pid -9将不起作用。
在这个问题中有一个不可中断的睡眠的解释: 什么是不间断的过程?
请注意 :硬盘驱动器出现故障时,会出现有趣的真实情况,并且所有尝试将数据写入该磁盘(文件系统)或从中读取数据的进程都会卡住,并且无法通过重新启动系统。 对于通过网络安装的卷也是如此,例如NFS。
编辑:正如psmears指出的那样,如果读取卷上的文件(通过NFS安装了iff intr安装选项read()则可以中断read() 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。