Для чего бы это ни стоило, поскольку dprintf
не является функцией POSIX, в случае проблем с переносимостью можно использовать следующее:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>
int
fdprintf ( int fd, size_t bufmax, const char * fmt, ... )
{
char * buffer;
int n;
va_list ap;
buffer = ( char * ) malloc ( bufmax );
if ( !buffer )
return 0;
va_start ( ap, fmt );
n = vsnprintf ( buffer, bufmax, fmt, ap );
va_end ( ap );
write ( fd, buffer, n );
free ( buffer );
return n;
}
Скорее всего, захочется проверить возвращаемое значение write
, но вы получите общее представление. Очевидно, это не буферизуется, как подпрограммы FILE *
; Я больше искал спецификаторы формата и возможность создавать символьные данные, которые будут записываться в дескриптор файла, а не беспокоиться о буферизации данных во время их записи.