问题
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?
回答1:
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
__fcntlwithfcntl: 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