也许我只是缺少它,但是是不是有相当于函数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>

scroll top