在 Linux 上,C 标准库调用 fread
和 fwrite
执行系统调用等价物 read
和 write
。
系统调用的手册页提到了中断,说在 errno
设置为 EINTR
时可能会发生短写。但是,库函数的手册页没有提及中断。那么,在这些库函数中会发生中断吗?
https://linux.die.net/man/3/fwrite
最佳答案
在 fread()
和 fwrite()
函数期间(以及在 read()
和 write()
系统调用期间 - 没有办法阻止这种情况。但是,如果发生中断会发生什么情况并不清楚 - 信号是否传递。这取决于关于您的应用程序(线程?)是如何设置来处理中断的。
fread()
或 fwrite()
产生影响。 siglongjmp()
(或 longjmp()
),则系统调用将不会返回。 sigaction()
的内容。SA_RESTART
表示底层的read
或者write
会被重试SA_RESTART
将意味着 read
或 write
将终止 - 可能是短读或写,或者可能有错误并且 errno
设置为 EINTR。 fread()
和fwrite()
很可能也会报告失败。 关于c - 在 fread() 和 fwrite() 库调用期间是否调度了中断信号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53245721/