in reply to Re: Populating A Hash
in thread Populating A Hash

If you later write to the file you should call flock after open.

That doesn't resolve the race condition. Flock before open is the way to go.

Being right, does not endow the right to be rude; politeness costs nothing.
Being unknowing, is not the same as being stupid.
Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.

Replies are listed 'Best First'.
Re^3: Populating A Hash
by Zaxo (Archbishop) on Mar 02, 2005 at 02:52 UTC

    Where do you get the filehandle to call flock by?

    After Compline,
    Zaxo

Re^3: Populating A Hash
by ambrus (Abbot) on Mar 02, 2005 at 10:07 UTC

    No, flock after opening is correct I belive. You might be thinking of the common error of opening a file in ">" mode, which O_TRUNCates the file, thus changing it before you had a chance to flock it.

      I could have sworn that there was still a race condition if you open the file for reading, then the OS pre-empts you and hands control to a process that opens it for writing, writes a bunch, then you get handed back the file and attempt to flock it.

      I'm too tired to look it up right now, but I thought I read (years back) about a way to atomically open and lock the file descriptor at the same time. The Camel is only talking about sysopen(), which still requires a separate flock().

      Being right, does not endow the right to be rude; politeness costs nothing.
      Being unknowing, is not the same as being stupid.
      Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
      Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.