Create a locked file with boost::interprocess::file_lock
boost, boost-interprocess, c++, file-locking, interprocess
Solution
You misunderstand the purpose of boost::interprocess::file_lock, when you create a file_lock using method boost::interprocess::file_lock test_lock("my_file"), you are not protecting the file "my_file" from reading/writing by other processes, you just declare that you have a lock that references to the file "my_file", if other processes also have locks that reference to the same file, you can implement mutual exclusion between these locks, but these locks don't care about the read/write operation on the file "my_file", the file is just a flag
Problem
I'd like to use `boost::interprocess::file_lock` to ensure that files that are written to a directory `x` by process `P1` are not read by process `P2` until they are complete. To do this, I'd like to have `P1` lock the files with `boost::interprocess::file_lock` while it's writing them, and then unlock them when it's done. Then `P2` can just skip over (and come back to) any files that are locked. The problem I'm having is that it appears that `boost::interprocess::file_lock` only lets you lock files that exist. But if I first create the file, and then lock it, then there's a race condition where: - `P1` creates the file - `P2` notices the file and starts reading it - `P1` locks the file - `P1` writes some data - `P2` reads some data, gets to the end, and ends up with only part of `P1`'s output. So what I'd like to do is create a file and have it be locked as soon as it's created. Is there a way to do this using `boost::interprocess::file_lock`?