fcntl and flockfile man pages

Jairo Medina jairo19@interhosting.us
Thu Oct 25 01:58:00 GMT 2007


Daniel Jacobowitz wrote:
> On Wed, Oct 24, 2007 at 11:25:33AM -0400, Jairo19@interhosting.us wrote:
>   
>>   Hola:
>>
>>    I was reading the fcntl man page on my Fedora 7(up to date) installation and 
>> saw the following comment:
>>
>> "
>>       Because  of  the  buffering  performed by the stdio(3) library, the use 
>> of record locking
>>       with routines in that package should be avoided; use read(2) and write(2) 
>> instead.
>> "
>>
>>   But then looking at the flockfile man page I see it states that stdio 
>> functions are thread safe, which may imply that record locking gives you 
>> nothing when used.
>>     
>
> No.  Record locks are for more than just threads in the same process;
> they work between processes.  Stdio buffering is within one file.
>   
Daniel, thanks for your quick answer.

I see, I started investigating this because my code was locking the file 
with fcntl(), and then writing with fputs(3), but then I found the fcntl 
man page says I should avoid that. So, in this case is the stdio 
buffering really affecting the synchronized write access to the file 
from threads and other processes ?
>   
>>   Also, I do not see anything that tells me if flockfile() creates mandatory 
>> locks (is it implied ?).
>>     
>
>        (Note:  this  locking  has nothing to do with the file locking
>        done by functions like flock(2) and lockf(3).)
>   
It seems, I can neither use flock(2) because it is not mandatory, nor 
lockf(3) because it is not portable. So I'm down to fcntl again, but I 
have to replace fputs(3) with write(2), which is not thread-safe per se. 
Does this sound right ?
> flockfile is locking the FILE object, not the underlying file.
>
>   
is it worth changing the flockfile man page from:

"flockfile, ftrylockfile, funlockfile - lock FILE for stdio"

to

"flockfile, ftrylockfile, funlockfile - lock the FILE object for stdio 
(not the underlying file)"
?

Regards.



More information about the Libc-alpha mailing list