Я играю с mkstemp()
, который предоставляет дескриптор файла, но я хочу генерировать форматированный вывод через fprintf()
. Есть ли простой способ преобразовать файловый дескриптор, предоставленный mkstemp()
в FILE *
структуру, подходящую для использования fprintf()
?
86
Ответы:
Использование
fdopen()
:FILE* fp = fdopen(fd, "w");
источник
fileno()
: linux.die.net/man/3/filenofd
открывался с некоторыми флагами (вродеO_NONBLOCK
) - что с ними будет послеfdopen
открытия с новыми флагами? Будут ли ониxor
объединены или заменены?fdopen
несколько раз? (при условии, что это происходит внутри некоторой функции, котораяFILE* f = fdopen(d, "w");
вывод man fdopen:
#include <stdio.h> FILE * fdopen(int fildes, const char *mode);
источник
Не существует стандартного способа сделать это (или наоборот), поскольку стандарт C ничего не говорит о дескрипторах файлов. Ваша конкретная платформа может предоставлять или не предоставлять такой механизм.
источник
mkstemp
подразумевает, что нестандартные решения приемлемы в данном конкретном случае. В этом случае, однако, он должен был добавитьposix
тег (который, как я вижу, с тех пор был добавлен).