_sopen, _wsopen
io.h:インデックス への移動
ヘッダーファイル
fcntl.h, sys\stat.h, share.h, io.h, stdio.h
カテゴリ
入出力ルーチン
プロトタイプ
int _sopen(char *path, int access, int shflag[, int mode]);
int _wsopen(wchar_t *path, int access, int shflag[, int mode]);
説明
共有ファイルを開きます。
_sopen は,path で指定されたファイルを開き,access,shflag,および mode で指定された共有読み出し/書き込みの準備を行います。
_wsopen は _sopen の Unicode バージョンです。Unicode バージョンは,filename として wchar_t 文字列を受け取ります。それ以外の機能は同じです。
_sopen の場合,access は,次のリストのビットフラグを OR で組み合わせて指定されます。
読み出し/書き込みフラグ
次のフラグの 1 つだけを使用できます。
O_RDONLY |
読み出し専用で開きます。 |
O_WRONLY |
書き込み専用で開きます。 |
O_RDWR |
読み書き用に開きます。 |
その他のアクセスフラグ
次のフラグの任意の論理組み合わせを使用できます。
O_NDELAY |
使用されません。UNIX 互換用。 |
O_APPEND |
これが設定されている場合は,書き込みのたびにファイルポインタがファイルの末尾に設定されます。 |
O_CREA |
ファイルが存在する場合,このフラグの効果はありません。ファイルが存在しない場合は,ファイルが作成され,chmod と同様に mode のビットを使ってファイル属性が設定されます。 |
O_TRUNC |
ファイルが存在する場合は,長さが 0 に切り捨てられます。ファイル属性は変更されません。 |
O_EXCL |
常に O_CREAT と組み合わせて使用されます。ファイルがすでに存在する場合は,エラーが返されます。 |
O_BINARY |
このフラグを指定して,明示的にバイナリモードでファイルを開くことができます。 |
O_TEXT |
このフラグを指定して,明示的にテキストモードでファイルを開くことができます。 |
O_NOINHERIT |
ファイルは子プロセスに渡されません。 |
メモ: これらの O_... シンボル定数は,fcntl.h で定義されています。
O_BINARY も O_TEXT も指定されていない場合は,グローバル変数 _fmode で設定されている変換モードでファイルが開かれます。
access の指定で O_CREAT フラグを使用する場合は,sys\stat.h で定義されている次のシンボル定数を mode 引数として _sopen に渡す必要があります。
S_IWRITE |
書き込み許可 |
S_IREAD |
読み取り許可 |
S_IREAD|S_IWRITE |
読み書き許可 |
shflag は,このファイルの path に対して許可されるファイル共有のタイプを指定します。shflag のシンボル定数は,share.h で定義されています。
SH_COMPAT |
互換モードを設定します。 |
SH_DENYRW |
読み書きアクセスを拒否します。 |
SH_DENYWR |
書き込みアクセスを拒否します。 |
SH_DENYRD |
読み出しアクセスを拒否します。 |
SH_DENYNONE |
読み書きアクセスを許可します。 |
SH_DENYNO |
読み書きアクセスを許可します。 |
戻り値
成功した場合,_sopen は負でない整数(ファイルハンドル)を返し,(ファイル内の現在の位置を指定する)ファイルポインタをファイルの先頭に設定します。
エラーが発生した場合は -1 を返し,グローバル変数 errno が次の値に設定されます。
EACCES |
アクセスが許可されない |
EINVACC |
無効なアクセスコード |
EMFILE |
オープンファイルが多すぎる |
ENOENT |
パスまたはファイル関数が見つからない |
例
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int handle,
handle1;
handle = sopen("c:\\autoexec.bat", O_RDONLY, SH_DENYWR, S_IREAD);
if (handle == -1)
{
perror (sys_errlist[errno]);
exit (1);
}
if (!handle)
{
printf("sopen failed\n");
exit(1);
}
/* 書き込みアクセスで sopen を試行します。
*/
handle1 = sopen("c:\\autoexec.bat", O_RDONLY, SH_DENYWR, S_IREAD);
if (handle1 == -1)
{
perror (sys_errlist[errno]);
exit (1);
}
if (!handle1)
{
printf("sopen failed\n");
exit(1);
}
close (handle);
close (handle1);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
_sopen |
+ |
|||
_wsopen |
+ |