vfprintf() - データのフォーマット設定とストリームへの出力

標準

標準/拡張機能 C/C++ 依存項目

ISO C
XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3
Language Environment

両方  

形式

#include <stdarg.h>
#include <stdio.h>

int vfprintf(FILE *  __restrict__stream, 
             const char *  __restrict__format, va_list arg_ptr);

#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>

int vfprintf_unlocked(FILE *  __restrict__stream, 
                      const char *  __restrict__format, va_list arg_ptr);

機能説明

vfprintf() 関数は、fprintf() に似ていますが、arg_ptr が、その番号がプログラムの呼び出しによって異なることがある引数のリストを指しているという点が異なります。これらの引数は、各呼び出しごとに va_start() で初期化する必要があります。反対に、fprintf() は引数のリストを持てますが、そのリストの引数の数は、プログラムをコンパイルしたときに決定されます。書式制御 ストリングの仕様については、fprintf()、printf()、sprintf() - データのフォーマット設定と書き込みを参照してください。

vfprintf() は、type=record または type=blocked を使用してオープンしたファイルで サポートされません。

vfprintf() には、書き込みのすぐ後で読み取り、または読み取りのすぐ後で書き込みを行うための書き込み操作と 同じ制約事項があります。書き込みと後続の読み取りの間には、介入フラッシュまたは位置変更が 必要です。読み取りと後続の書き込みの間でも、EOF に達していない限り、介入フラッシュまたは位置変更が必要です。

vfprintf_unlocked() は、スレッド・セーフでないことを除いて、機能的に vfprintf() と 等価です。この関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、この関数を呼び出す場合だけです。

戻り値

正常に実行された場合、vfprintf() は stream に書き込まれた文字数を戻します。

正常に実行されなかった場合、vfprintf() は負の値を戻します。
注: C 言語の一部の UNIX に基づくインプリメンテーションに 対比して、vprintf() ファミリーの z/OS® XL C/C++ インプリメンテーション は変数引数リストを指すポインターを増分します。引数を指すポインターを増やすかどうかを制御するために、vsprintf() を呼び出すたびにその後に va_end マクロを 呼び出します。

CELEBV03
⁄* CELEBV03                                      

   This example prints out a variable number of strings to the                  
   file myfile.dat, using &vfprt..                                              
                                                                                
 *⁄                                                                             
#include <stdarg.h>                                                             
#include <stdio.h>                                                              
                                                                                
void vout(FILE *stream, char *fmt, ...);                                        
char fmt1 [] = "%s  %s  %s¥n";
                                                                                
int main(void)                                                                  
{                                                                               
   FILE *stream;                                                                
   stream = fopen("myfile.dat", "w");                                           
                                                                                
   vout(stream, fmt1, "Sat", "Sun", "Mon");                                     
}                                                                               
                                                                                
void vout(FILE *stream, char *fmt, ...)                                         
                                                                                
{                                                                               
   va_list arg_ptr;                                                             
                                                                                
   va_start(arg_ptr, fmt);                                                      
   vfprintf(stream, fmt, arg_ptr);                                              
   va_end(arg_ptr);                                                             
}                                                                               
                                                                                
出力:
Sat  Sun  Mon

関連情報