_fsopen、_wfsopen

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

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

パラメーター

  • filename
    開くファイルの名前。

  • mode
    アクセス許可の種類。

  • shflag
    可能な共有の種類。

戻り値

これらの各関数は、ストリームへのポインターを返します。 エラーが発生すると、NULL のポインター値を返します。 filename または mode が NULL または空の文字列の場合、これらの関数は、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、これらの関数は NULL を返し、errno を EINVAL に設定します。

エラー コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。

解説

_fsopen 関数は、filename でストリームとして指定されたファイルを開き、モードと shflag で定義されているように、そのファイルを以降の共有読み取りまたは共有書き込み用に準備します。 _wfsopen_fsopen のワイド文字バージョンです。_wfsopen の引数 filename と mode はワイド文字列です。 それ以外では、_wfsopen_fsopen の動作は同じです。

mode 文字列には、ファイルに要求するアクセス モードを指定します。次の表にアクセス モードを示します。

語句

定義

"r"

読み取り用に開きます。 ファイルが存在しない場合や見つからない場合、_fsopen 呼び出しは失敗します。

"w"

書き込み用に空のファイルを開きます。 指定したファイルが既に存在すると、そのファイルの内容は破棄されます。

"a"

末尾に書き込みができるようにファイルを開きます (追加モード)。ファイルが存在しない場合は、先にファイルを作成します。

"r+"

読み出しと書き込みの両方のモードで開きます。 ファイルが存在している必要があります。

"w+"

読み出しと書き込みの両方のモードで空のファイルを開きます。 指定したファイルが既に存在すると、そのファイルの内容は破棄されます。

"a+"

読み出しと追加の両方のモードでファイルを開きます。ファイルが存在しない場合は、先にファイルを作成します。

"w" と "w+" は、既存のファイルを破棄するので注意して使用してください。

ファイルを "a" または "a+" のアクセス モードで開くと、書き込み操作はすべてファイルの終端から行われます。 ファイル ポインターは fseek 関数または rewind 関数で移動できますが、書き込み操作の前に必ずファイルの終端に戻されます。 したがって、既存のデータは上書きされません。 "r+"、"w+"、または "a+" のいずれかのアクセス モードを指定すると、読み出しと書き込みの両方が許可されます (ファイルは更新モードで開きます)。 ただし、読み出しと書き込みを切り替えるときは、その前に fsetposfseekrewind のいずれかの関数を実行する必要があります。 必要に応じて、fsetpos 関数または fseek 関数には現在位置を指定できます。 上記の値以外に、mode に次の文字を追加すると、改行文字の変換モードを指定できます。

語句

定義

t

ファイルをテキスト (変換) モードで開きます。 このモードでは、入力時にキャリッジ リターンとライン フィード (CR-LF: carriage return–line feed) が単独のライン フィード (LF: line feed) に変換され、出力時に LF 文字が CR-LF に変換されます。 また、Ctrl + Z は入力時に EOF (EOF: end-of-file) 文字として解釈されます。 読み出しモードまたは読み出しと書き込みの両方のモードで開かれたファイルでは、_fsopen がファイル末尾の Ctrl + Z の有無を調べ、削除できる場合は削除します。 これは、Ctrl + Z で終わるファイル内を fseek 関数および ftell 関数で移動するとき、ファイル末尾近くで fseek が正しく動作しないことがあるためです。

b

ファイルをバイナリ (非変換) モードで開きます。上記の変換は行われません。

t または b を mode で指定しなければ、変換モードは既定モードの _fmode 変数によって定義されます。 t または b を引数の先頭に指定すると、エラーが発生して NULL が返されます。 テキスト モードとバイナリ モードについては、「テキスト モードとバイナリ モードのファイル入出力」を参照してください。

shflag 引数は、Share.h で定義されている次の記号定数 (manifest 定数) のいずれかで構成される定数式です。

語句

定義

_SH_COMPAT

16 ビット アプリケーションに対応した互換モードを設定します。

_SH_DENYNO

読み出しアクセスおよび書き込みアクセスを許可します。

_SH_DENYRD

ファイルの読み出しを禁止します。

_SH_DENYRW

ファイルの読み出しと書き込みを禁止します。

_SH_DENYWR

ファイルの書き込みを禁止します。

汎用テキスト ルーチンのマップ

Tchar.h のルーチン

_UNICODE および _MBCS が未定義の場合

_MBCS が定義されている場合

_UNICODE が定義されている場合

_tfsopen

_fsopen

_fsopen

_wfsopen

必要条件

機能

必須ヘッダー

省略可能なヘッダー

_fsopen

<stdio.h>

<share.h>

shflag パラメーターのマニフェスト定数を定義します。

_wfsopen

<stdio.h> または <wchar.h>

<share.h>

shflag パラメーターのマニフェスト定数を定義します。

使用例

// crt_fsopen.c

#include <stdio.h>
#include <stdlib.h>
#include <share.h>

int main( void )
{
   FILE *stream;

   // Open output file for writing. Using _fsopen allows us to
   // ensure that no one else writes to the file while we are
   // writing to it.
    //
   if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
   {
      fprintf( stream, "No one else in the network can write "
                       "to this file until we are done.\n" );
      fclose( stream );
   }
   // Now others can write to the file while we read it.
   system( "type outfile" );
}
  我々 が完了するまで誰もがネットワークにこのファイルに記述できます。

同等の .NET Framework 関数

参照

参照

ストリーム入出力

fclose、_fcloseall

_fdopen、_wfdopen

ferror

_fileno

fopen、_wfopen

freopen、_wfreopen

_open、_wopen

_setmode

_sopen、_wsopen