Como obter um ponteiro FILE de um descritor de arquivo?


Respostas:


103

Use fdopen():


34
E para obter o descritor de arquivo de um FILE * use fileno(): linux.die.net/man/3/fileno
Lee Netherton

2
se fdfoi aberto com alguns sinalizadores (como O_NONBLOCK) - o que acontecerá com eles depois de fdopenabrir com novos sinalizadores? Eles ficarão xorjuntos ou serão substituídos?
xealits

5
@jww: Para começar, os descritores de arquivo não são ANSI C.
Rufflewind

2
é ruim ligar fdopenvárias vezes? (supondo que aconteça dentro de alguma função que é chamada repetidamente)
phil294

2
@xealits As opções para o ARQUIVO * devem estar dentro do escopo do descritor de arquivo já aberto. Portanto, se você abriu fd com somente leitura e FILE * somente com gravação, ele deve lançar uma exceção. Para obter mais informações, consulte ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/…
Tjad Clark

28

FILE* f = fdopen(d, "w");

saída man fdopen:

SINOPSE

A fdopen()função associa um fluxo ao descritor de arquivo existente fildes,. O modo do fluxo deve ser compatível com o modo do descritor de arquivo. Quando o fluxo é fechado via fclose(3), fildestambém é fechado.


1
Não disponível em ANSI C.
jww


-8

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.


17
Depende do que você entende por "padrão". POSIX é um padrão.
Richard Pennington

12
A pergunta era sobre descritores de arquivo. ;-)
Richard Pennington

11
@ Neil> a questão sendo marcada como C não significa "diga-me a verdade sobre o padrão C", mas sim "Estou codificando em C, não consigo fazer isso, diga-me se é possível e como? "
Gregory Pakosz

8
Concordo que não há uma maneira padrão de fazer isso, mas a menção do OP a mkstempimplica que soluções não padrão são aceitáveis ​​neste caso específico. Nesse caso, no entanto, ele deveria ter adicionado a posixtag (que vejo que já foi adicionada).
Emerick Rogul

9
@Neil, e o propósito da Internet e o significado da vida. Você faria mais sentido se dissesse que tem opiniões diferentes. Eu também duvido que SO seja tudo sobre divisão de padrões. E não é muito prático confiar nas habilidades de marcação de alguém com uma experiência de SO correspondente à reputação de 23.
Michael Krelin - hacker
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.