fdopen() — ストリームとファイル記述子との関連付け

フォーマット

#include <stdio.h>
FILE *fdopen(int handle, char *type);

言語レベル: XPG4

スレッド・セーフ: はい。

統合ファイル・システム・インターフェース: この関数は、 コンパイル・コマンドに対して SYSIFCOPT(*NOIFSIO) が指定されている場合には使用できません。

説明

fdopen() 関数は、入力または出力ストリームを、handle により識別されるファイルと関連付けます。type 変数は、ストリームに要求されるアクセス・タイプを指定する文字ストリングです。 この変数には、位置パラメーターが 1 つ含まれ、オプションのキーワード・パラメーターが後に続きます。

位置パラメーターには次の値が可能です。

モード
説明
r
テキスト・ファイルを読み込むためのストリームを作成します。ファイル・ポインターはファイルの先頭に設定されます。
w
テキスト・ファイルに書き込むためのストリームを作成します。ファイル・ポインターはファイルの先頭に設定されます。
a
テキスト・ファイルの最後に追加モードで書き込むためのストリームを作成します。 ファイル・ポインターはファイルの最後に設定されます。
r+
テキスト・ファイルを読み書きするためのストリームを作成します。ファイル・ポインターはファイルの先頭に設定されます。
w+
テキスト・ファイルを読み書きするためのストリームを作成します。ファイル・ポインターはファイルの先頭に設定されます。
a+
テキスト・ファイルの最後に追加モードで読み書きするためのストリームを作成します。 ファイル・ポインターはファイルの最後に設定されます。
rb
バイナリー・ファイルを読み込むためのストリームを作成します。ファイル・ポインターはファイルの先頭に設定されます。
wb
バイナリー・ファイルに書き込むためのストリームを作成します。ファイル・ポインターはファイルの先頭に設定されます。
ab
追加モードでバイナリー・ファイルに書き込むためのストリームを作成します。ファイル・ポインターはファイルの最後に設定されます。
r+b または rb+
バイナリー・ファイルを読み書きするためのストリームを作成します。ファイル・ポインターはファイルの先頭に設定されます。
w+b または wb+
バイナリー・ファイルを読み書きするためのストリームを作成します。ファイル・ポインターはファイルの先頭に設定されます。
a+b または ab+
追加モードでバイナリー・ファイルを読み書きするためのストリームを作成します。 ファイル・ポインターはファイルの最後に設定されます。
注:
w, w+, wb, wb+, および w+b モードを使用する場合は注意してください。既存のファイルを破棄することがあります。

指定する type は、ファイルをオープンするために使用したアクセス方式と互換性がなければなりません。 ファイルを O_APPEND フラグでオープンした場合は、ストリーム・モードは a, a+, ab, a+b, または ab+ でなければなりません。fdopen() 関数を使用するには、ファイル記述子が必要です。 記述子を取得するには、POSIX 関数 open() を使用します。 O_APPEND フラグは open() 用のモードです。open() 用のモードは QSYSINC/H/FCNTL で定義されます。詳しい情報については、i5/OS® Information Center の『API』のトピックを参照してください。

fdopen() に使用できるキーワード・パラメーターは、fopen() — ファイルのオープン に説明されている、統合ファイル・システム用のキーワード・パラメーターと同じです。

fdopen() が NULL を戻した場合は、close() を使用してファイルをクローズします。 fdopen() が正常に実行された場合は、fclose() を使用してストリームとファイルをクローズする必要があります。

戻り値

fdopen() 関数は、オープン・ファイルにアクセスするために使用できるファイル構造体を指すポインターを戻します。 NULL ポインターの戻り値は、エラーを示します。

fdopen() の使用例

次の例はファイル sample.dat をオープンし、fdopen() を使用してストリームをファイルと関連付けます。次に、ストリームからバッファーに読み込みます。

/* compile with SYSIFCOPT(*IFSIO) */
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
 
int main(void)
{
   long length;
   int fh;
   char buffer[20];
   FILE *fp;
 
   printf("¥nCreating sample.dat.¥n");
   if ((fp= fopen("/sample.dat", "w")) == NULL) {
       perror(" File was not created: ");
       exit(1);
   }
   fputs("Sample Program", fp);
   fclose(fp);
 
   memset(buffer, '¥0', 20);                              /* Initialize buffer*/
 
   if (-1 == (fh = open("/sample.dat", O_RDWR|O_APPEND))) {
      perror("Unable to open sample.dat");
      exit(1);
   }
   if (NULL == (fp = fdopen(fh, "r"))) {
      perror("fdopen failed");
      close(fh);
      exit(1);
   }
   if (14 != fread(buffer, 1, 14, fp)) {
      perror("fread failed");
      fclose(fp);
      exit(1);
   }
   printf("Successfully read from the stream the following:¥n%s.¥n", buffer);
   fclose(fp);
   return 1;
 
   /****************************************************************
    * The output should be:
    *
    * Creating sample.dat.
    * Successfully read from the stream the following:
    * Sample Program.
    */
}

関連情報



[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]