flock()
通常是异步信号安全的,因为它是一个系统调用。它的语义使得很难以不同的方式实现它。它不在 POSIX 的异步信号安全函数列表中,因为它根本不在 POSIX 中。
是否可以flock()
毫无问题地在 sigaction 处理程序中使用?
根据以下主题中的@alk回答:
我们可以开发我们的属性flock()
函数(它的名字可以是async_flock()
)。我们在这个新函数中复制原始lockf()
代码的内容,然后我们进行以下更改以获得异步信号安全函数:
__fcntl
为fcntl
:编译代码所必需的替换__set_errno(<errno-define>)
为errno = <errno-define>
:编译代码所必需的
memset()
用适当的分配替换调用struct fcntl = {0}
:有必要让它成为异步信号保存。