flock()
is generally async-signal-safe because it is a system call. Its semantics make it hard to implement it differently. It is not in the POSIX's list of async-signal-safe functions because it is not in POSIX at all.
Is it possible to use flock()
in the sigaction handler without problems?
According to @alk answer in the following topic:
We can develop our property flock()
function (its name could be async_flock()
). we copy in this new function the content of the origin lockf()
code and then we make the following changes in order to get an async-signal-safe function:
- replace
__fcntl
withfcntl
: necessary to make the code compile replace
__set_errno(<errno-define>)
witherrno = <errno-define>
: necessary to make the code compilereplace the call to
memset()
with appropriate assigmentsstruct fcntl = {0}
: necessary to have it become async-signal-save.
来源:https://stackoverflow.com/questions/16979059/use-flock-in-the-sigaction-handler