[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: not able to get fd of ofstream using stdio_filebuf
From: |
Dev |
Subject: |
Re: not able to get fd of ofstream using stdio_filebuf |
Date: |
28 Mar 2005 03:56:56 -0800 |
User-agent: |
G2/0.2 |
Rolf Magnus wrote:
> Devika wrote:
>
> > Hi,
> >
> > I want to call fcntl function for which I need fd().
> > The code part is smthing like :
> >
> > ofstream osf("somefile" , ios::app);
> >
> > filebuf * fb ;
> > fb = osf.rdbuf();
> >
> > fcntl(fb -> fd(), F_SETLKW, &cfLock);
> >
> > Now this code was working fine with gcc 2.96 but now it[gcc 3.2.3]
says
> > no matching function for fd() since the function fd() of
basic_filebuf
> > has been removed in gcc 3.2.3. and they have provided new extension
> > stdio_filebuf.
>
> Yes. That's because the C++ standard forbids basic_filebuf to provide
any
> member functions that are not explicitly mentioned in the standard.
>
> > I tried following thing:
> >
> > #include <ext/stdio_filebuf.h>
> > typedef __gnu_cxx::stdio_filebuf FILEBUF;
>
> This shouldn't compile. stdio_filebuf is a template.
>
> > It is like this:
typedef __gnu_cxx::stdio_filebuf<char> FILEBUF;
Sorry for my mistake.
> >
> > ofstream osf("somefile" , ios::app);
> > FILEBUF *fb ;
> > fb = dynamic_cast<FILEBUF *>(osf.rdbuf());
> >
> > ...But its not getting typecasted properly and i m getting segment
> > fault.
>
> You cannot just take a basic_filebuf and use it as if it were an
> stdio_filebuf. It actually has to be one. Your dynamic_cast probably
> returns a null pointer, since the conversion failed.