_fsopen, _wfsopen

提供: RAD Studio
移動先: 案内検索

stdio.h:インデックス への移動


ヘッダーファイル

stdio.h, share.h

カテゴリ

入出力ルーチン

プロトタイプ

FILE *_fsopen(const char *filename, const char *mode, int shflag);

FILE *_wfsopen(const wchar_t *filename, const wchar_t *mode, int shflag);

説明

共有ファイルのストリームを開きます。

_fsopen は,filename で指定されたファイルを開き,そのファイルにストリームを関連付けます。_fsopen は,後続の操作でストリームを特定するために使用されるポインタを返します。

_fsopen の呼び出しに使用される mode 文字列は,次のいずれかの値です。

r 読み出し専用で開きます。 w 書き込み用に作成します。その名前のファイルがすでに存在する場合は,上書きされます。 a 追加します。ファイルの終わりに書き込むように開きます。ただし,ファイルが存在しない場合は,書き込み用に作成します。 r+ 既存のファイルを更新(読み出しと書き込み)用に開きます。 w+ 新しいファイルを更新(読み出しと書き込み)用に作成します。その名前のファイルがすでに存在する場合は,上書きされます。 a+ 追加用に開きます。ファイルの終わりで更新するために開きます(ファイルが存在しない場合は作成する)。



指定したファイルをテキストモードで開くまたは作成するには,mode 文字列に t を追加します(rt,w+t など)。同様に,バイナリモードを指定するには,mode 文字列に b を追加します(wb,a+b など)。_fsopen では,mode 文字列のアルファベット文字と + 文字の間に t または b を挿入することもできます。たとえば,rt+ は r+t と同じです。mode 文字列で t または b が指定されていない場合,モードは,グローバル変数 _fmode で制御されます。_fmode が O_BINARY に設定されている場合,ファイルはバイナリモードで開かれます。_fmode が O_TEXT に設定されている場合,ファイルはテキストモードで開かれます。これらの O_... 定数は,fcntl.h で定義されています。

ファイルを更新用に開く場合は,取得したストリームで入力と出力の両方を実行できます。

  • 出力の直後に入力を続けることはできません。間に fseek または rewind を入れる必要があります。
  • 入力の直後に出力を続けることはできません。間に fseek または rewind を入れるか,入力がファイルの終わり(EOF)に到達する必要があります。

shflag は,このファイルの filename に対して許可されるファイル共有のタイプを指定します。shflag のシンボル定数は,share.h で定義されています。

SH_COMPAT

互換モードを設定します。

SH_DENYRW

読み書きアクセスを拒否します。

SH_DENYWR

書き込みアクセスを拒否します。

SH_DENYRD

読み出しアクセスを拒否します。

SH_DENYNONE

読み書きアクセスを許可します。

SH_DENYNO

読み書きアクセスを許可します。



戻り値

成功した場合,_fsopen は,新しく開かれたストリームを指すポインタを返します。

エラーが発生した場合は,NULL を返します。



 #include <io.h>
 #include <process.h>
 #include <share.h>
 #include <stdio.h>
 int main(void)
 {
   FILE *f;
   int status;
   f = _fsopen("TESTFILE.DAT", "r", SH_DENYNO);
   if (f == NULL)
   {
     printf("_fsopen failed\n");
     exit(1);
   }
   status = access("TESTFILE.DAT", 6);
   if (status == 0)
     printf("read/write access allowed\n");
   else
     printf("read/write access not allowed\n");
   fclose(f);
   return 0;
 }



移植性



POSIX Win32 ANSI C ANSI C++

_fsopen

+

_wfsopen

NT のみ