Bawię się mkstemp()
, co zapewnia deskryptor pliku, ale chcę wygenerować sformatowane dane wyjściowe za pośrednictwem fprintf()
. Czy istnieje łatwy sposób przekształcenia deskryptora pliku dostarczonego przez program mkstemp()
w FILE *
strukturę, której można używać fprintf()
?
85
Odpowiedzi:
Zastosowanie
fdopen()
:FILE* fp = fdopen(fd, "w");
źródło
fileno()
: linux.die.net/man/3/filenofd
został otwarty z niektórymi flagami (jakO_NONBLOCK
) - co się z nimi stanie pofdopen
otwarciu z nowymi flagami? Czy zostanąxor
połączone czy zastąpione?fdopen
wiele razy? (zakładając, że dzieje się to wewnątrz jakiejś funkcji, która jestFILE* f = fdopen(d, "w");
man fdopen wyjście:
#include <stdio.h> FILE * fdopen(int fildes, const char *mode);
źródło
Nie ma standardowego sposobu, aby to zrobić (lub odwrotnie), ponieważ standard C nie ma nic do powiedzenia na temat deskryptorów plików. Twoja konkretna platforma może lub nie zapewniać takiego mechanizmu.
źródło
mkstemp
sugeruje, że niestandardowe rozwiązania są dopuszczalne w tym konkretnym przypadku. W takim przypadku jednak powinien był dodaćposix
tag (który, jak widzę, został już dodany).