fcntl, lockf, which is better to use for file locking?

后端 未结 5 1404
春和景丽
春和景丽 2020-11-28 21:32

Looking for information regarding the advantages and disadvantages of both fcntl and lockf

5条回答
  •  臣服心动
    2020-11-28 22:05

    I came across an issue while using fcntl and flock recently that I felt I should report here as searching for either term shows this page near the top on both.

    Be advised BSD locks, as mentioned above, are advisory. For those who do not know OSX (darwin) is BSD. This must be remembered when opening a file to write into.

    To use fcntl/flock you must first open the file and get its ID. However if you have opened the file with "w" the file will instantly be zeroed out. If your process then fails to get the lock as the file is in use elsewhere, it will most likely return, leaving the file as 0kb. The process which had the lock will now find the file has vanished from underneath it, catastrophic results normally follow.

    To remedy this situation, when using file locking, never open the file "w", but instead open it "a", to append. Then if the lock is successfully acquired, you can then safely clear the file as "w" would have, ie. :

    fseek(fileHandle, 0, SEEK_SET);//move to the start

    ftruncate(fileno((FILE *) fileHandle), 0);//clear it out

    This was an unpleasant lesson for me.

提交回复
热议问题