フォーマット
#include <stdio.h> FILE *fdopen(int handle, char *type);
言語レベル: XPG4
スレッド・セーフ: はい。
統合ファイル・システム・インターフェース: この関数は、 コンパイル・コマンドに対して SYSIFCOPT(*NOIFSIO) が指定されている場合には使用できません。
説明
fdopen() 関数は、入力または出力ストリームを、handle により識別されるファイルと関連付けます。type 変数は、ストリームに要求されるアクセス・タイプを指定する文字ストリングです。 この変数には、位置パラメーターが 1 つ含まれ、オプションのキーワード・パラメーターが後に続きます。
位置パラメーターには次の値が可能です。
指定する 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. */ }
関連情報