本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 2 : システムコール > o

open(2)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

open() ― 読み取りまたは書き込み用のファイルオープン

構文

#include <fcntl.h>

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

特記事項

ANSI C ", ..." 構文は、可変長の引き数リストを意味し、そのオプションの メンバーは、対応するコメント (/* */) の中に示されています。

説明

open() システムコールは、指定されたファイル名のファイルのための ファイル記述子をオープンし、 oflag の値に従ってファイルステータス フラグを設定します。

path 引き数は、ファイル名を示すパス名へのポインターです。 パス名の長さは PATH_MAX バイトを超えてはなりません。

oflag 引き数は、以下の「読み取り書き込みフラグ」、「一般フラグ」、および「同期 I/O フラグ」にリストされたフラグのビット毎の包含的論理和である値です。

オプションの mode 引き数は、 O_CREAT フラグが指定されたときのみ有効です。

ファイル中の現在の位置をマークするのに使用されるファイルポインターが、ファイルの先頭にセットされます。

新しいファイル記述子は、 exec*() システムコールを呼び出した後も、open のままにセットされます。 fcntl(2) を参照してください。

読み取り書き込みフラグ

oflag の値を作る時、 O_RDONLY, O_WRONLY, または O_RDWR フラグのうちのただ 1 つを使う必要があります。 これらのフラグを 1 つも使わなかったり、複数のフラグを使った時、 動作は定義されません。

O_RDONLY 

読み取り専用にオープンします。

O_WRONLY 

書き込み専用にオープンします。

O_RDWR 

読み取り書き込み用にオープンします。

一般フラグ

下記のリストのフラグは、 ファイルがオープンされている間に fcntl() を用いて変更できます。 詳しくは fcntl(2) および fcntl(5) を参照してください。

O_APPEND 

このフラグがセットされていると、 書き込みのたびに、あらかじめファイルオフセットがファイルの末尾に 設定されます。

O_CREAT 

後に示す O_EXCL のところで説明する場合を除き、 指定されたファイルが存在していれば、 このフラグに効果はありません。 指定されたファイルが存在しなければ 次のようになります。 ファイルの所有者 ID は、プロセスの 実効ユーザー ID に設定されます。 親ディレクトリのセットグループ ID ビットがセットされていなければ、 ファイルのグループ ID は、プロセスの 有効グループ ID に設定されます。 親ディレクトリのセットグループ ID ビットがセットされていれば、 ファイルのグループ ID は、親ディレクトリのグループ ID に設定されます。

新規ファイルモードのファイルアクセス パーミッションビットは、 mode の値にセットされ、次のように処理したものになります creat(2) を参照してください)。

  • プロセスのファイルモード生成マスクでセットされているビットは、それぞれ に対応する新規ファイルモードのビットをクリアします umask(2) を参照)。

  • 新規ファイルモードの「実行後テキストイメージ保存」ビットが クリアされます chmod(2) を参照)。

  • アクセス制御リストを使用する HFS ファイルシステムでは、 ファイルアクセス パーミッションに対応する 3 個のベース ACL エントリーが生成されます acl(5) を参照)。

  • アクセス制御リストをサポートしている JFS システムでは、 親ディレクトリのデフォルトの ACL エントリーに応じてオプションの ACL エントリーが作成されます aclv(5) 参照)。

O_EXCL 

O_EXCL および O_CREAT がセットされていて、 指定されたファイルが存在する場合、 open() は失敗します。

O_LARGEFILE 

2 GB を超えるファイルにアクセスするために 32 ビットアプリケーションが使用する場合のある標準外のフラグです。 creat64(2) を参照してください。

O_NDELAY 

このフラグの設定によって、以後の読み取り書き込みが影響を受けます。 read(2) および write(2) を参照してください。

O_RDONLY または O_WRONLY をセットして FIFO をオープンした場合

  • O_NDELAY がセットされている場合

    • 読み取り専用の open() はすぐに終了します。

    • 書き込み専用の open() は、このファイルを 読み取り用にオープンしているプロセスが存在していなかったら、 エラーを返します。

  • O_NDELAY がクリアされている場合

    • 読み取り専用の open() は、どこかのプロセスがそのファイルを書き込み用にオープンするまで終了しません。

    • 書き込み専用の open() は、どこかのプロセスがそのファイルを読み取り用にオープンするまで終了しません。

通信回線に相当するファイルをオープンする場合

  • O_NDELAY がセットされている場合

    • open() は、 キャリア を待たないで終了します。

  • O_NDELAY がクリアされている場合

    • open() は、キャリアが確認されるまで終了しません。

O_NOCTTY 

このフラグがセットされ、 path がターミナルデバイスを指している場合、 open() の処理を行っても、そのターミナルはプロセスの制御ターミナルに なりません。

O_NONBLOCK 

open(2) では O_NDELAY と同じ効果を持ちますが、 read(2) および write(2) での効果が少し違います。 O_NONBLOCKO_NDELAY の両方が指定された場合、 O_NONBLOCK が優先されます。

O_TRUNC 

指定されたファイルが存在する場合、 ファイル長は 0 に切り捨てられ、 モードと所有者は変わりません。

同期 I/O フラグ

O_DSYNC, O_RSYNC, および O_SYNC フラグはともに、同期 I/O のサポートを構成します。 これらのフラグは、通常のファイル以外のファイルや、 I/O をブロック型特殊ファイルに許可するシステム上のブロック型特殊ファイルに対して無視されます pathconf(2) を参照)。 O_DSYNC フラグと O_SYNC フラグの両方がセットされると、結果は O_SYNC フラグのみがセットされた時と同じになります。 O_RSYNC フラグは、 O_DSYNC フラグまたは O_SYNC フラグとともにセットされない場合、無視されます。

O_DSYNC 

O_DSYNC でファイルをオープンしたり、 fcntl()F_SETFL オプションでこのフラグをセットした場合、プロセスによるこのファイルへの書き込みは、書き込み要求で指定されたデータおよびデータの検索に必要なすべてのファイル属性が、ディスクに書き込まれるまでブロックします。 データの検索に必要ではないファイル属性 (アクセス時刻、修正時刻、ステータス変更時刻) は、必ずしも呼び出しプロセスに返る前にディスクに書き込まれません。

O_SYNC 

O_DSYNC の内容に加え、 アクセス時刻、修正時刻、およびステータス変更時刻を含め、 書き込み操作によって変更されたすべてのファイル属性が呼び出しプロセスに返る前にディスクに書き込まれます。

O_RSYNC|O_DSYNC (一緒に指定される)
  

ファイルシステム書き込み用の O_DSYNC と同じです。

ファイルシステム読み取りについて、呼び出しプロセスは、読み取ろうとするデータ、およびデータを検索する必要があるすべてのファイル属性が、ディスク上のそれらのイメージと同じになるまでブロックします。 読み取ろうとするデータの書き込みが保留されていると、呼び出しプロセスに返る前に実行されます。

O_RSYNC|O_SYNC (一緒に指定される)
  

ファイルシステム書き込み用の O_SYNC と同じです。

ファイルシステム読み取り用の O_RSYNC|O_DSYNC の内容に加え、アクセス時刻、修正時刻、およびステータス変更時刻を含む、読み取り操作によって変更されたすべての属性も、ディスク上のそれらのイメージと同じです。

戻り値

open() は、次の値を返します。

 n 

正常終了。 n は、オープンされたファイルのファイル記述子です。

-1 

失敗。 エラーの種類を示す値が、 errno にセットされます。

エラー

open() が失敗した場合、 errno が次の値の 1 つにセットされます。

[EACCES] 

指定されたファイルで oflag パーミッションが拒否された場合

[EACCES] 

パスプレフィックスの構成要素のうち、 探索中にパーミッションが拒否されるものがあった場合

[EACCES] 

指定されたファイルが存在せず、そのファイルを生成するディレクトリへの書き込みが許可されていない場合

[EACCES] 

O_TRUNC が指定されて、書き込みパーミッションが拒否された場合

[EAGAIN] 

指定されたファイルが存在し、 強制モードのファイル/レコードロッキングが設定されていて chmod(2) を参照)、 lockf() または fcntl() システムコールにより、そのファイルに対してレコードロックが発行されていて、 O_TRUNC がセットされている場合

[EDQUOT] 

このファイルシステムでのユーザーのディスク割り当てのブロック限界または i ノード限界に達している場合

[EEXIST] 

O_CREAT および O_EXCL がセットされ、指定された名前のファイルが存在する場合

[EFAULT] 

path ポインターが、プロセスに割り当てられたアドレス空間の外を指している場合

[EINTR] 

open() システムコールの実行中にシグナルが検出され、 このシステムコールが再開されなかった場合 signal(5) および sigvector(2) を参照)

[EINVAL] 

oflag として O_WRONLYO_RDWR の両方が指定された場合

[EISDIR] 

指定された名前のファイルがディレクトリで、 oflag が書き込みまたは読み取り/書き込みである場合

[ELOOP] 

パス名の解釈中に現われたシンボリックリンクが多すぎる場合

[EMFILE] 

オープンできる最大個数のファイル記述子が現在オープンされている場合

[ENAMETOOLONG] 

指定されたパス名の長さが PATH_MAX バイトを超えているか、 _POSIX_NO_TRUNC が有効になっていてパス名の構成要素の中に NAME_MAX バイトを超える長さのものがある場合

[ENFILE] 

システム ファイルテーブルがいっぱいである場合

[ENODEV] 

指定された名前のファイルがキャラクタ型特殊ファイルまたはブロック型特殊ファイルであり、この特殊ファイルに対応するデバイスがカーネルの中に構成されていないか、この特殊ファイルに対応する DLKM ドライバがロードできなかった場合

[ENOENT] 

指定された名前のファイルが存在しない場合 (たとえば、 path が null である場合、 path の構成要素が存在しない場合、または、 O_CREAT がセットされておらず、 ファイルそのものが存在しない場合)。

[ENOTDIR] 

パスプレフィックスの構成要素の中にディレクトリでないものがある場合

[ENXIO] 

O_NDELAY がセットされていて、指定された名前のファイルが FIFO で、 O_WRONLY がセットされていて、 そのファイルを読み取り用にオープンしているプロセスがない場合

[ENXIO] 

指定された名前のファイルがキャラクタ型特殊ファイルまたはブロック型特殊ファイルであるのにもかかわらず、この特殊ファイルに対応するデバイスが存在しない場合

[ENOSPC] 

O_CREAT が指定されて、ファイルが存在せず、ファイルを登録するディレクトリが拡張できない場合

[EOVERFLOW] 

指定された名前のファイルが通常のファイルで、 そのファイルのサイズを off_t のサイズで正しく示すことができない場合

[EROFS] 

指定された名前のファイルが読み取り専用ファイルシステムにあり、 oflag が書き込みまたは読み取り/書き込みである場合

[ETXTBSY] 

ファイルが実行用にオープンされていて、 oflag が書き込みまたは読み取り/書き込みである場合。 通常の実行可能ファイルは、実行開始時に短時間だけオープンされますが、 その他の型の実行可能ファイルは、長時間オープンされたままになったり、 ある種の状況で無期限にオープンされたままになる場合があります。

次のように open() を呼び出すと、 inputfile ファイルを読み取り専用にオープンし、 inputfile のファイル記述子を返します。 inputfile ファイルからの読み取りの例は、 マニュアルの read(2) の項を参照してください。

int infd; 
infd = open ("inputfile", O_RDONLY); 

次のように open() を呼び出すと、 outputfile を書き込み用にオープンし、 outputfile のファイル記述子を返します。 outputfile のディスクスペースをあらかじめ割り当てる例は、 prealloc(2) マニュアル項を参照してください。 outputfile への書き込みの例は、 write(2) マニュアル項を参照してください。

int outfd; 
outfd = open ("outputfile", O_WRONLY); 

次の呼び出しは、読み取りおよび書き込み用の完全な同期 I/O ファイルとして、ファイル iofile をオープンします。

int iofd; 
iofd = open ("iofile", O_RDWR|O_SYNC|O_RSYNC); 

著者

open() は HP, AT&T, およびカリフォルニア大学バークレイ校で開発されました。

参照

acl(2), chmod(2), close(2), creat(2), dup(2), fcntl(2), lockf(2), lseek(2), creat64(2), pathconf(2), read(2), select(2), umask(2), write(2), setacl(2),acl(5),aclv(5), fcntl(5), signal(5), thread_safety(5), unistd(5)

標準準拠

open(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, POSIX.4

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.