record locking

Matthias Weiss matthias.weiss@inode.at
Tue Mar 26 09:06:00 GMT 2002


On Mon, Mar 25, 2002 at 05:57:39PM -0500, Phil Edwards wrote:
> On Sun, Mar 24, 2002 at 06:03:53PM +0100, Matthias Weiss wrote:
> > AFAIK I have to do an additional "open" call to the
> > libc API to get a file descriptor that allows me
> > to use flock.
> 
> With recent versions of the library you can use an extension, fstream::fd(),
> to obtain the underlying file descriptor.

What do you mean with recent version??

I've got 3.0.4 and the compiler says:

no matching function for call to `std::basic_fstream<char, 
   std::char_traits<char> >::fd()

when I use fd() like this:

fstream my_file;
...
int fd = my_file.fd();

> > So my request would be to integrate this in the fstream
> > class as an extension or to add a member function that 
> > returns the file descriptor.
> 
> Or you could extend fstream (or one of the buffer classes) to do the
> locking for you at appropriate times.  That way the "non-standard-ness"
> would be explicitly in your code, rather than depending on a particular
> library extension.

I don't think I can do that.

The basic_fstream class uses it's private member _M_filebuf, which is of type
basic_filebuf, to open a file. basic_filebuf has a private member _M_file which
got the file descriptor from its base class, the struct FILE.

Because these are private members, my class that I'd derive from basic_fstream
wouldn't have any access to the file descriptor because of private member protection.


matthias



More information about the Libstdc++ mailing list