_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 があるかどうかを確認し、それを、可能な場合は削除します。 これは fseek と ftell を使用すると、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" );
}