in reply to Writing to a file atomically without renaming

flock can be used to prevent other people from using the file, but it's an elective system. That means that if a program doesn't try to lock the file before using it, it'll be able to read and modify file even if your application has it locked. I think that's the best you can do.

Replies are listed 'Best First'.
Re^2: Writing to a file atomically without renaming
by nomis80 (Sexton) on Jun 30, 2005 at 19:04 UTC

    Thank you for your reply, but I don't want atomic writing to solve a mutual access problem. I already lock my files using flock. What I need is to maintain the integrity of the file at all times (that is, exception safety). I don't want to start overwriting the file and then in the middle run out of space. I want some kind of two-phase commit system. And I want it to preserve the ownership of the file.

    Maybe I could do it by mmapping the file, writing my new stuff at the end so that I can erase it if things go wrong. Then when I'm done I just move my stuff up to the beginning of the file, erasing what was already there. That can't fail, I guess, so I think it could work. What do you think of that?

      how about using a symbolic link?

      For instance, suppose you have foo-1 and foo.link pointing to foo-1. To update it, first create foo-2, then change its permissions and finally point foo.link to foo-2.

      The point is that foo.link can have more relaxed permissions, i.e., 644

        Ok, but how do I make sure foo-2's owner is the same as foo-1?