在Linux系统中,C标准库调用fread和fwrite会执行对应的系统调用read和write。系统调用的man手册提到了中断,说明短写可能会导致errno设置为EINTR。然而,库函数的man手册没有提及中断。因此,在这些库函数执行期间是否会发生中断呢?请参考以下链接: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()
也会报告失败。