"fprintf"ような機能ファイル記述子(int fdの代わりにファイル*fukuoka properties株式会社)

StackOverflow https://stackoverflow.com/questions/4246588

  •  27-09-2019
  •  | 
  •  

質問

になったかもしれないけ足ではないのに相当する機能fprintfファイル記述子は、もう一時的にフリップフロップとか。

役に立ちましたか?

解決

きみ dprintf (GNU拡張子はCまたはPOSIX) :

の機能dprintf()およびvdprintf() がっているように見えglibc2図書館) 正確な類似のfprintf()と vfprintf()を除き、その出力 ファイル記述子fdの代わりに、 指定されたストリーム.

編集 このため、複数のんのコメントはPOSIX2008年の標準化されます。

他のヒント

ファイルディスクリプタにprintfを行うための標準的な機能がありますが、POSIX標準のFILE *fdopen(int desc, const char *mode)としてファイルディスクリプタ「オープン」することができます:

は何のCまたはPOSIX(2008年以前に編集)はありません。私はないんだけど必ずどれだけサポートに直接記述子を使用するフリップバックがあるが、私はあなたが最初のバッファをフラッシュする場合、それがうまくいくかもしれない推測している...

もちろん、あなただけのvsprintfのようなものを使用して、独自に実装することができますが、明らかにあなたは、バッファリングの世話をする必要があります。

何それの価値については、

dprintfはPOSIX機能がないので、1は移植性が問題になる場合は、以下を使用することができます:

#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 *のようにバッファリングされません。私はより多くのフォーマット指定子と、むしろそれが書かれているように、データをバッファリングを心配するよりも、ファイルディスクリプタに書き込まれる文字データを構築する能力を探していた。

いいえ、標準としてそこではなく、両者は異なることを行います。 FDを使用してfprinft、標準入出力の一環として、バッファのようなものは、読み取りと書き込みのない、サポートのungetcなどはすべてのことと直接OSを呼び出しをバイパスします。

そこで、彼らは互換性はありません。それらの間のフリップばたつきがstdioのバッファリングを台無しかの何も他の

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top