_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+" のアクセスの種類を指定すると、読み取りと書き込みの両方を行うことができます (ファイルは更新モードで開きます)。ただし、読み取りと書き込みの間で切り替える場合、その間の fsetpos、 fseek、または 巻き戻し の操作が必要です。必要に応じて、fsetpos 関数または fseek 関数には現在位置を指定できます。上記の値に加え新しい行とファイル管理の変換モードを指定するには、次の文字の 1 つが mode に含めることができます。
語句 |
定義 |
---|---|
t |
テキスト (変換)モードでファイルを開きます。このモードでは、キャリッジ戻り行の指定 (CR-LF)の組み合わせの入力時に一つのライン フィードに (LF)変換され、 LF 文字が出力 CR-LF の組み合わせに変換されます。また、 Ctrl + Z は入力のファイルの終端の文字として解釈されます。/書き込みに対して読み取りまたは読み取り開かれたファイルでは _fsopen はファイルの末尾に Ctrl + Z がチェックし、それを、可能であれば削除します。これは fseek と ftell を使用すると、 CTRL+Z で終わるファイル内で移動するに fseek はファイルの末尾付近でが正しく動作する可能性があるためです。 |
b |
バイナリ (無変換)モードでファイルを開きます; 上記の変換は行われません。 |
S |
キャッシュがディスクからのシーケンシャル アクセスに最適化されるように指定します。ただし、シーケンシャル アクセスに限定されるわけではありません。 |
R |
キャッシュがディスクからのランダム アクセスに最適化されるように指定します。ただし、ランダム アクセスに限定されるわけではありません。 |
T |
ファイルを一時ファイルとして指定します。可能な場合、ファイルはディスクにフラッシュされません。 |
D |
ファイルを一時ファイルとして指定します。最後のファイル ポインターが閉じられると、ファイルは削除されます。 |
t か b が modeになっていない場合、変換モードは既定のモードの変数 _fmodeによって定義されます。t または b を引数の先頭に指定すると、エラーが発生して NULL が返されます。テキストおよびバイナリ モードの詳細については、 テキストとバイナリ モードは、 I/O がありますを参照してください。
引数 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 |
必要条件
Function |
必須ヘッダー |
省略可能なヘッダー |
---|---|---|
_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 関数
System::IO::FileStream::FileStream