在sigaction处理程序中使用flock()

时间:2013-06-07 07:59:42

标签: c linux signals flock

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

是否可以在sigaction处理程序中使用flock()而没有问题?

1 个答案:

答案 0 :(得分:0)

根据以下topic中的 @alk 回答:

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

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

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