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

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

是否有可能在没有问题的情况下在sigaction处理程序中使用flock()

Solutions Collecting From Web of "在sigaction处理程序中使用flock()"

根据@alk回答以下主题 :

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

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

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