“fprintf中”文件描述符样函数(即INT FD代替FILE * fp的)
题
也许我只是缺少它,但是是不是有相当于函数fprintf中的文件描述符,甚至一种方式在它们之间暂时触发器?
解决方案
您可以看看 dprintf
( GNU扩展,而不是在C或POSIX 强>):
的功能dprintf()和vdprintf() (如在glibc2的库中找到)是 )fprintf中的确切类似物(和 vfprintf(),不同之处在于它们输出到 一个文件描述符fd,而不是到 给定的流。
修改强>如在评论中指出由几个的话,POSIX 2008标准化这些功能。
其他提示
有没有C或POSIX(编辑:前2008)标准功能上做一个文件描述符printf
,但可以在“开放式”一个文件描述符作为与POSIX标准FILE *
一个fdopen(int desc, const char *mode)
。我不知道如何很好的支持翻转回直接使用描述的,但我猜它可能工作,如果你刷新缓冲区第一...
当然,你可以只实现自己的使用类似vsprintf
,但很明显,你就必须采取缓冲的照顾。
有关它的价值,因为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 *
程序做;我一直在寻找多为格式说明,并建立将被写入到文件的描述符中的字符数据,而不用担心,因为它正被写入缓冲数据的能力。
没有,没有标准,但两个做不同的事情。 fprinft,作为标准输入输出的一部分,做事情像缓冲器读取和写入,支架等ungetc函数使用FD绕过所有和直接调用OS。
因此,他们不能互换。它们之间翻转扑腾会搞砸了标准输入输出缓冲,如果没有别的
可以打开文件描述符为可由fprintf()
与 fdopen <处理一个正常的文件/ A>