in reply to Re: Writing to a file atomically without renaming
in thread Writing to a file atomically without renaming

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?

  • Comment on Re^2: Writing to a file atomically without renaming

Replies are listed 'Best First'.
Re^3: Writing to a file atomically without renaming
by salva (Canon) on Jun 30, 2005 at 19:40 UTC
    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?
        oh, I see your problem now...

        I think you can't do it without becoming root in some way... like for example, using sudo.