El error “'fdopen' no se declaró” se encontró con g ++ 4 que se compiló con g ++ 3

Tengo un código que compiló alegremente con g ++ versión 3.something. Luego quise construir otro código que tuviera símbolos C ++ 11, así que actualicé a g ++ 4.7. Ahora mi código original no se construye. Me sale el error:

'fdopen' no fue declarado en este ámbito

De acuerdo con la página de manual, fdopen () se declara en stdio.h que estoy incluyendo. No estoy seguro de que sea relevante, pero estoy trabajando en un entorno Cygwin. La versión exacta de g ++ que estoy usando es la versión 4.7.2 proporcionada por Cygwin.

No he cambiado este código desde que cambié el compilador y definitivamente puedo confirmar que se construyó y que mi código de prueba se ejecutó y aprobó con el compilador anterior.

Según lo solicitado, código de ejemplo para demostrar el problema:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
    int   fd;
    FILE *fp;

    fd = open("test.txt", (O_WRONLY | O_CREAT | O_EXCL), S_IRWXU);
    if(0 < fd)
    {
        fp = fdopen(fd, "wb");

        fprintf(fp, "Testing...\n");
        fclose(fp);
    }

    return 0;
}


# g++ -std=c++11 -o test test.cpp
test.cpp: In function 'int main(int, char**)':
test.cpp:14:29: error: 'fdopen' was not declared in this scope

Respuestas a la pregunta(2)

Su respuesta a la pregunta