_sopen, _wsopen

提供: RAD Studio
移動先: 案内検索

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

+