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