We all know that Linux/Unix will automatically block attempts to write to a file that currently open for writing by another process. But is it possible to block/lock read access to a file if another process has it open for writing? I've got two different scripts, both start at random times and run various times during the day: one script overwrites a particular file; the other one reads from that file. I want the second one to block(wait) or fail if the first one has the file open.
Linux – Iis it possible to lock a file in Linux so it can’t be read if another process has it open for writing
filesystemslinux
Related Topic
- Linux – How to find other end of unix socket connection
- Linux – How to find error messages from Linux init.d/rc.d scripts
- Linux Web Server – Proper Permissions for Website Files and Folders
- Linux – How to determine the number of seeks performed on Linux
- Linux – How to detect exceptionally long file locks in linux
Best Answer
The flock(1) utility may do what you want
Take out a write lock on the file when you want to overwrite it
flock -x /path/to/lockfile somecommand file
Have the other command check for the lock.
flock -n /path/to/lockfile anothercommand file
If the file is locked then you get an exit code of 1 otherwise it's yours and you can do what you want with it