c-在fread()和fwrite()库调用期间是否发送中断信号



在Linux上,C标准库调用freadfwrite执行等效的系统调用readwrite

系统调用的手册页提到了中断,表示errno设置为EINTR时可能会发生短写。但是,库函数的手册页没有说明中断。那么,在这些库函数期间会发生中断吗?

https://linux.die.net/man/3/fwrite

fread()fwrite()函数期间(以及在read()write()系统调用期间(,可能会发生中断。但是,如果发生中断,会发生什么还不太清楚——信号是否传递。这取决于应用程序(线程?(如何设置来处理中断。

  • 如果忽略它们,则对fread()fwrite()没有影响
  • 如果有默认处理,程序将停止;函数将不会返回
  • 如果信号处理程序退出或使用siglongjmp()(或longjmp()(,则系统调用不会返回
  • 如果您的处理程序返回,这将取决于您在设置处理程序时为sigaction()指定的内容。
    • SA_RESTART表示将重试底层readwrite
    • 没有SA_RESTART将意味着readwrite将终止——可能是由于短暂的读取或写入,或者可能是由于错误和errno设置为EINTR
    • 如果系统调用指示故障,则如果在中断发生之前没有读取或写入数据,则fread()fwrite()也可能报告故障
    • 如果某些数据被读取或写入,您可能会得到简短的读取或写入响应

最新更新