次の方法で共有


_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」を参照してください。

解説

ストリームとして filename で指定された _fsopen 関数はファイルを開き、後続の共有読み取りまたは書き込み用に 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+" のアクセスの種類を指定すると、読み取りと書き込みの両方を行うことができます (ファイルが更新用に開く呼ばれます)。 ただし、読み取りと書き込みの間で切り替える場合、中間の fsetpos関数、または 巻き戻し 操作が必要です。 必要に応じて、fsetpos 関数または fseek 関数には現在位置を指定できます。 上記の値だけでなく、新しい行にファイル管理の変換モードを指定するには、次の 1 つが mode に含めることができます。

語句

定義

t

テキスト (変換) モードでファイルを開きます。 このモードでは、キャリッジ return–line 指定 (CR-LF) の組み合わせは入力時に一つの改行 (LF) に変換され、LF の文字が出力の CR-LF の組み合わせに変換されます。 また、Ctrl + Z は入力時に EOF (end-of-file) 文字として解釈されます。 /書き込み用に読み取るか、読み取ることで開かれたファイルでは _fsopen がファイル末尾に Ctrl + Z があるかどうかを確認し、それを、可能な場合は削除します。 これは fseekftell を使用すると、CTRL+Z で終わるファイル内で移動するには fseek ファイル末尾付近で正しく動作する可能性があるためです。

b

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

S

キャッシュがディスクからのシーケンシャル アクセスに最適化されるように指定します。ただし、シーケンシャル アクセスに限定されるわけではありません。

R

キャッシュがディスクからのランダム アクセスに最適化されるように指定します。ただし、ランダム アクセスに限定されるわけではありません。

T

ファイルを一時ファイルとして指定します。 可能な場合、ファイルはディスクにフラッシュされません。

D

ファイルを一時ファイルとして指定します。 最後のファイル ポインターが閉じられると、ファイルは削除されます。

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

引数 shflag は次のマニフェスト定数を 1 行で構成される定数式 Share.h で定義されます。

語句

定義

_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