Estou brincando com mkstemp()
, que fornece um descritor de arquivo, mas quero gerar uma saída formatada por meio de fprintf()
. Existe uma maneira fácil de transformar o descritor de arquivo fornecido por mkstemp()
em uma FILE *
estrutura adequada para uso com fprintf()
?
86
Respostas:
Use
fdopen()
:FILE* fp = fdopen(fd, "w");
fonte
fileno()
: linux.die.net/man/3/filenofd
foi aberto com alguns sinalizadores (comoO_NONBLOCK
) - o que acontecerá com eles depois defdopen
abrir com novos sinalizadores? Eles ficarãoxor
juntos ou serão substituídos?fdopen
várias vezes? (supondo que aconteça dentro de alguma função que é chamada repetidamente)FILE* f = fdopen(d, "w");
saída man fdopen:
#include <stdio.h> FILE * fdopen(int fildes, const char *mode);
fonte
Não existe uma maneira padrão de fazer isso (ou o contrário), pois o padrão C não tem nada a dizer sobre os descritores de arquivo. Sua plataforma específica pode ou não fornecer esse mecanismo.
fonte
mkstemp
implica que soluções não padrão são aceitáveis neste caso específico. Nesse caso, no entanto, ele deveria ter adicionado aposix
tag (que vejo que já foi adicionada).