微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当fd是普通文件时,linux系统调用readfd,buf,count是否返回小于计数?

当我们在Linux上调用read(fd,buf,count)的时候,系统(函数调用的返回值是否可以小于文件结束字节less的情况。

我说,在手册页里查了一下

“成功时返回读取的字节数(零表示文件结束),文件位置按此数字提前,如果这个数字小于请求的字节数,则不是错误;这可能发生在例如因为现在实际上可用的字节更less(可能是因为我们接近文件结尾,或者因为我们正在从pipe道读取数据或从terminalread() ), 或者因为read()被信号中断

所以这里是我的问题:一个常规文件的read()如何被一个信号中断? 通过什么可能的信号?

Windows相当于暂停()系统调用

将等待和waitpid块SIGCHLD并解除它在Linux中返回时?

没有findC中的getrandom系统调用

“系统调用参数打开(模式)包含未初始化的字节(S)”在打开系统调用

x86汇编:在Linux上进行系统调用之前,您应该保存所有寄存器吗?

如何使用写入系统调用将int写入文件并完全按照写入方式读取它们?

查看由Java程序所做的所有系统调用

将build立的TCP连接转发到另一个端口上的另一个进程?

打印在nasm中浮动,而不绑定到C函数

我应该在C中声明系统调用函数吗?

此文档页面指定哪些调用可以被信号中断,并且read()在列表中。 您必须在Linux中启用此行为(使用SA_RESTART ),认情况下不启用。

是的, read()可以被信号中断。 但是,当进程正在从属于文件系统上的文件的描述符读取时。

文件进程调用read() ,它进入一个所谓的不可中断的睡眠在这种模式下,系统调用完成之前不会处理任何信号。 要么是因为某些错误,要么是在读取请求的数据时。

注意 :当进程处于不可中断的睡眠状态时,您甚至不能用SIGKILL信号终止进程。 换句话说, kill $pid -9将不起作用。

在这个问题中有一个不可中断的睡眠的解释: 什么是不间断的过程?

请注意 :硬盘驱动器出现故障时,会出现有趣的真实情况,并且所有尝试将数据写入该磁盘(文件系统)或从中读取数据的进程都会卡住,并且无法通过重新启动系统。 对于通过网络安装的卷也是如此,例如NFS。

编辑:正如psmears指出的那样,如果读取卷上的文件(通过NFS安装了iff intr安装选项read()则可以中断read() 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐