open - ファイルのオープン

【書式】

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <io.h>

int open(const char *path, int oflag [ , int mode ] );

【解説】

open()はpathで示されるファイルをオープンします。パラメタoflag はオー

プンされたファイルに対して許される操作の種類を指定します。 oflagは以

下に示すフラグを論理和したものをあたえます。ただし、最初の3 つのフラ

グはこのうちひとつしか指定できません。

O_RDONLY

読み出しのみ可

O_WRONLY

書き込みのみ可

O_RDWR

読み書き共に可

O_BINARY

バイナリモードでオープンします

O_APPEND

このフラグがセットされていると、書き込みを実行する直前にファイル

ポインタはファイルの最後にシークします

O_CREAT

すでにファイルが存在する場合、このフラグは効果を持ちません。ファ

イルが存在しない場合には新たなファイルを作成します。現在のファイ

ルモード生成マスクの 1になっているビットに対応するmodeのビットが

クリアされたものが、作成されたファイルのモードになります

O_TRUNC

ファイルがすでに存在する場合、ファイル長は0 に切りつめられます。

ファイルモードは変りません

O_EXCL

O_EXCL がO_CREATと共に指定されている場合、すでにファイルが存在し

ているときにはopen()は失敗します

modeはO_CREATを指定して新たなファイルを作成するときに必要となり、 フ

ァイルの保護モードを指定します。<sys/stat.h>で定義されている定数を使

って次のように指定します。

S_IWRITE

書き込み可

S_IREAD

読み出し可(リードオンリーファイルを作ります)

S_IREAD | S_IWRITE

読み書き可

DOS窓 ではライトオンリーのファイルは作成できませんので、 S_IWRITEと

S_IREAD | S_IWRITEとは同じ意味となり、いずれもリードライト可能なファ

イルになります。

modeの値は実際に使用される前にumask(3)で設定されている値でマスクされ

ます。詳しくはumask(3)を参照してください。

【リターン値】

正常終了するとファイルハンドル(負でない整数値)を返します。エラーを検

出すると-1を返し、エラーの種類をerrnoにセットします。

【エラー】

EACCES

アクセスが拒否されました( リードオンリーのファイルを O_WRONLY や

O_RDWRでオープンしようとした。またはpathがディレクトリだった)

EEXIST

O_CREATとO_EXCLが指定されているとき、ファイルがすでに存在します

EINVAL

アクセスコードが無効です

EMFILE

オープンされているファイルの数が多すぎます

ENOENT

O_CREAT が指定されておらず、しかもpathで示されるファイルが存在し

ません

ENOENT

pathの先行するパス名が存在しません

【可搬性】

UNIX, DOS窓

【参照】

close(3), creat(3), umask(3)

【copyright (c) 安江正樹@東海大学理学部物理学科】