在 fread() 和 fwrite() 库调用期间是否调度了中断信号?

mag*_*nus 4 c file interrupt file-handling

在 Linux 上,C 标准库调用freadfwrite执行系统调用等效项,read并且write.

系统调用的手册页提到了中断,说errnoset to可能会发生短写EINTR。但是,库函数的手册页没有提及中断。那么,在这些库函数中会发生中断吗?

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

Jon*_*ler 5

中断可能发生在fread()andfwrite()函数期间(以及在read()andwrite()系统调用期间- 没有办法阻止它。但是,如果发生中断会发生什么情况并不清楚 - 无论信号是否传递。这取决于您的应用程序如何(线程?)被设置为处理中断。

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