"fprintf"ような機能ファイル記述子(int fdの代わりにファイル*fukuoka properties株式会社)
質問
になったかもしれないけ足ではないのに相当する機能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のバッファリングを台無しかの何も他の