シノプシス
#含める
説明
ザ開いた() システムコールlinuxコマンドは、パス名をファイル記述子に変換するために使用されます(次のI / Oで使用するための小さい負でない整数) 読む, 書きます、など)。呼び出しが成功すると、ファイルディスクリプタは、プロセスに対して現在開いていない最も低いファイルディスクリプタになります。この呼び出しは、他のプロセスと共有されていない新しいオープンファイルを作成します。 (ただし、公開されている共有ファイルは、フォーク(2)システムコールを参照してください。)新しいファイルディスクリプタは、exec関数間で開いたままに設定されます(fcntl(2)参照)。ファイルオフセットは、ファイルの先頭に設定されます。
パラメータ フラグ の一つでありますO_RDONLY, O_WRONLY またはO_RDWR ファイルを読取り専用、書込み専用または読出し/書込みのそれぞれを開けることを要求するビット毎の読出し命令と、 または 次のものがゼロ以上あるもの:
O_CREAT
ファイルが存在しない場合は作成されます。ファイルの所有者(ユーザーID)は、プロセスの実効ユーザーIDに設定されます。グループ所有権(グループID)は、プロセスの実効グループIDまたは親ディレクトリのグループIDに設定されます(ファイルシステムのタイプとマウントオプション、および親ディレクトリのモードによって異なります)。例えばmountオプション bsdgroups そして sysvgroups ext2ファイルシステムのマウント(8)).
O_EXCL
と一緒に使用する場合O_CREATファイルがすでに存在する場合はエラーとなり、開いた 失敗するでしょう。この文脈では、シンボリックリンクはどこにポイントされていても存在します。O_EXCL NFSファイルシステム上で壊れている場合、ロックタスクを実行するためにそれに依存するプログラムには競合状態が含まれます。ロックファイルを使用してアトミックファイルロックを実行するソリューションは、同じfs(たとえば、ホスト名とpidを組み込む)で一意のファイルを作成し、link(2)を使用してロックファイルにリンクします。もしリンク() 0を返すと、ロックは成功します。それ以外の場合は、 stat(2)をユニークなファイルに書き込んで、リンクカウントが2に増加したかどうかを確認します。この場合、ロックも成功します。
O_NOCTTY
もし パス名 端末装置を参照してください---tty(4)---プロセスに制御端末がない場合でも、プロセスの制御端末にはなりません。
O_TRUNC
ファイルが既に存在し、通常のファイルであり、オープンモードが書き込みを許可する(すなわちO_RDWRまたはO_WRONLYである)場合、それは長さ0に切り詰められる。ファイルがFIFOまたは端末装置ファイルである場合、O_TRUNCフラグは無視される。それ以外の場合、O_TRUNCの効果は指定されません。 (多くのLinuxバージョンでは無視されますが、他のバージョンではエラーが返されます)。
O_APPEND
ファイルは追加モードで開きます。それぞれの前に書きます、ファイルポインタはファイルの末尾に置かれます。lseek. O_APPEND 複数のプロセスが一度にファイルにデータを追加すると、NFSファイルシステムで破損したファイルが生成される可能性があります。これは、NFSがファイルへの追加をサポートしていないため、クライアントカーネルはそれをシミュレートする必要があります。これは競合条件なしでは実行できません。
O_NONBLOCK またはO_NDELAY
可能であれば、ファイルは非ブロックモードで開かれます。どちらも開いた 返されるファイル記述子に対する後続の操作も、呼び出しプロセスを待機させます。 FIFO(名前付きパイプ)の処理については、以下を参照してください。FIFO(4)。このモードは、FIFO以外のファイルに影響を与える必要はありません。
O_SYNC
ファイルは同期I / Oのために開かれます。どれか書きますsは、データが物理的に基になるハードウェアに書き込まれるまで、呼び出しプロセスをブロックします。 しかし、以下の制限事項を参照してください。
O_NOFOLLOW
もし パス名 シンボリックリンクの場合、オープンは失敗します。これはFreeBSDの拡張版で、バージョン2.1.126のLinuxに追加されました。パス名の以前のコンポーネントのシンボリックリンクには引き続き従います。 glibc 2.0.100以降のヘッダーには、このフラグの定義が含まれています。 2.1.126より前のカーネルは、それが使用されると無視します .
O_DIRECTORY
もし パス名 ディレクトリではないため、オープンに失敗します。このフラグはLinux特有のもので、カーネルバージョン2.1.126で追加されました。Opendir(3)は、FIFOまたはテープデバイス上で呼び出されますが、実装の外で使用すべきではありませんOpendir.
O_DIRECT
このファイルとのI / Oのキャッシュ効果を最小限に抑えてください。一般的にこれはパフォーマンスを低下させますが、アプリケーションが独自のキャッシングを行うような特殊な状況では便利です。ファイルI / Oは、ユーザー空間バッファーに直接/から行われます。 I / Oは同期式であり、すなわち、 読む(2)または書きます(2)システムコールでは、データの転送が保証されます。転送サイズ、およびユーザバッファとファイルオフセットのアラインメントはすべて、ファイルシステムの論理ブロックサイズの倍数でなければなりません。このフラグは、多くのUnixライクなシステムでサポートされています。カーネルバージョン2.4.10のLinuxでサポートが追加されました。ブロックデバイスのための意味的に類似したインターフェースは、生(8). O_ASYNC シグナルを生成する(デフォルトではSIGIOですが、これはfcntl(2))を参照してください。この機能は、端末、擬似端末、およびソケットでのみ使用できます。見るfcntl(2)を参照してください。 O_LARGEFILE ラージファイルシステムをサポートする32ビットシステムでは、サイズを31ビットで表現できないファイルを開くことができます。 これらのオプションのフラグのいくつかは、fcntl ファイルが開かれた後。 引数 モード 新しいファイルが作成された場合に使用するアクセス許可を指定します。それはプロセスの変更によって変更されますumask 通常の方法で作成されたファイルのパーミッションは(モード&〜umask)。このモードは、新しく作成されたファイルの将来のアクセスにのみ適用されることに注意してください。その開いた読み取り専用ファイルを作成する呼び出しは、読み取り/書き込みファイル記述子を返すことがあります。 以下の記号定数が提供されています。 モード : S_IRWXU 00700ユーザー(ファイル所有者)が読み取り、書き込み、および実行許可を持っている S_IRUSR(S_IREAD) 00400ユーザーに読み取り権があります S_IWUSR(S_IWRITE) 00200ユーザーに書き込み権限があります S_IXUSR(S_IEXEC) 00100ユーザーが実行許可を持っています S_IRWXG 00070グループには、読み取り、書き込み、および実行権限があります。 S_IRGRP 00040グループに読み取り権があります S_IWGRP 00020グループに書き込み権限があります S_IXGRP 00010グループに実行許可があります S_IRWXO 00007他の人が読み取り、書き込み、および実行の許可を持っています S_IROTH 00004他のユーザーには読み取り権限があります S_IWOTH 00002他に書き込み権限があります S_IXOTH 00001他に実行許可があります モード 次の場合に指定する必要がありますO_CREAT の中に フラグ それ以外の場合は無視されます。 クレア は開いた 〜と フラグ に等しいO_CREAT | O_WRONLY | O_TRUNC. 戻り値 開いた そしてクレア 新しいファイル記述子を返すか、エラーが発生した場合は-1を返します(この場合、 エラー 適切に設定される)。ご了承ください開いた デバイス特殊ファイルを開くことができますクレア それらを作成することはできません - 使用mknod(2)である。 UIDマッピングを有効にしたNFSファイルシステムでは、開いた ファイル記述子を返すことができます。 読む(2)要求が拒否されているEACCES。これは、クライアントが開いた パーミッションをチェックすることで、UIDマッピングは読み取りと書き込み要求時にサーバーによって実行されます。 ファイルが新しく作成された場合、そのatime、ctime、mtimeフィールドは現在の時刻に設定され、親ディレクトリのctimeフィールドとmtimeフィールドも設定されます。それ以外の場合、O_TRUNCフラグのためにファイルが変更された場合、そのctimeフィールドとmtimeフィールドは現在の時刻に設定されます。 EEXIST パス名 既に存在し、O_CREAT そしてO_EXCL に使われていた。 EISDIR パス名 ディレクトリを指し、要求されたアクセスは関連する書込み(すなわち、O_WRONLY またはO_RDWR 設定されています)。 EACCES 要求されたファイルへのアクセスは許可されていません。 パス名 検索(実行)権限が許可されていないか、ファイルがまだ存在せず、親ディレクトリへの書き込みアクセスが許可されていません。 ENAMETOOLONG パス名 長すぎた ENOENT O_CREATは設定されておらず、指定されたファイルは存在しません。または、 パス名 存在しないか、またはぶら下がっているシンボリックリンクです。 ENOTDIR ディレクトリとして使用されるコンポーネント パス名 実際にディレクトリではありません。O_DIRECTORY指定された パス名 ディレクトリではありませんでした。 ENXIO O_NONBLOCK | O_WRONLYが設定されていれば、指定されたファイルはFIFOであり、読み取りのためにファイルを開いているプロセスはありません。または、ファイルがデバイス特殊ファイルであり、対応するデバイスが存在しません。 ENODEV パス名 デバイス特殊ファイルを参照し、対応するデバイスは存在しません。 (これはLinuxカーネルのバグです。この場合、ENXIOを返さなければなりません)。 EROFS パス名 読み取り専用ファイルシステム上のファイルを指し、書き込みアクセスが要求されました。 ETXTBSY パス名 現在実行されており、書き込みアクセスが要求された実行可能イメージを参照します。 EFAULT パス名 アクセス可能なアドレス空間の外側を指します。 ELOOP 解決に遭遇したシンボリックリンクが多すぎます パス名 、またはO_NOFOLLOW 指定された パス名 シンボリックリンクだった。 ENOSPC パス名 作成されたが、 パス名 新しいファイルのための余地がありません。 ENOMEM 不十分なカーネルメモリが利用可能でした。 EMFILE プロセスにはすでに最大数のファイルが開いています。 ENFILE システムで開いているファイルの合計数に制限があります。 SVr4、SVID、POSIX、X / OPEN、BSD 4.3O_NOFOLLOW そしてO_DIRECTORY フラグはLinux固有のものです。 1つは、_GNU_SOURCE マクロを使用して定義を取得します。 NFSの基礎となるプロトコルには多くの不具合があり、他のものに影響を及ぼしますO_SYNC そしてO_NDELAY. POSIXは、フラグに対応する同期I / Oの3つの異なるバリエーションを提供していますO_SYNC , O_DSYNC そして O_RSYNC。現在のところ(2.1.130)、これはLinuxでは同義語です。 エラー
従う
制限事項




