5

flock()通常是异步信号安全的,因为它是一个系统调用。它的语义使得很难以不同的方式实现它。它不在 POSIX 的异步信号安全函数列表中,因为它根本不在 POSIX 中。

是否可以flock()毫无问题地在 sigaction 处理程序中使用?

4

1 回答 1

0

根据以下主题中的@alk回答:

我们可以开发我们的属性flock()函数(它的名字可以是async_flock())。我们在这个新函数中复制原始lockf()代码的内容,然后我们进行以下更改以获得异步信号安全函数:

  • 替换__fcntlfcntl:编译代码所必需的
  • 替换__set_errno(<errno-define>)errno = <errno-define>:编译代码所必需的

  • memset()用适当的分配替换调用struct fcntl = {0}:有必要让它成为异步信号保存。

于 2013-06-07T17:30:05.143 回答