オープン、レコード生成 - オープンし、ファイルまたはデバイスを作成するために使用されます

SYNOPSIS概要

#includ Eは<sys / types.h>に
する#include <SYS / stat.h> 
の#include <fcntl.h> 

int型オープン(CONSTチャー* パス名、int型のフラグ)。
オープンint型(のconstのchar * のパス名、int型のフラグ、mode_t モード
int型のレコード生成(のconstのchar * のパス名、mode_t モード)。

記述(DESCRIPTION)

()開いているが、典型的には、ファイルディスクリプタへのパス名を変換するために使用されている(小さな非負整数、書き込み、読み出しする場合に使用され、他のI / O操作されるであろう)。オープン()呼び出しが成功し、それを返します新しいファイルディスクリプタ(常に記述子の最小値を取らない)。この呼び出しは、新しいユニークなファイルディスクリプタを割り当てられている新しいオープンファイルは、実行中の他のプログラムと共有されることはありません作成されます(ただし、フォーク(2)システムコールが共有)。その後で開いているファイル操作関数の新しいファイル記述子を使用する。(を参照のfcntl(2))。読み取るポインタファイルヘッダが配置されています

パラメータフラグを介しO_RDONLYのO_WRONLYまたはO_RDWR(指定されたファイルを読み取り専用で、モード開口を書き込み専用または読み書き可能)と、以下の選択可能なモードのビット単位のゼロ以上- または操作を得ます。

O_CREAT
ファイルは、新しいファイルを作成する場合は。新しいファイルの所有者(ユーザーID)は、このプログラムのために提供された有効なユーザーIDが存在しないです。同じ文書では、このプログラムのために、通常のパケットまたは親ディレクトリのパケットIDを提供する有効なパケットでありますIDは、(ファイルシステムの種類に応じて、負荷レベルディレクトリモードオプション、参照、 マウント (8)ロードされたオプションに記載のext2ファイルシステムの性能 bsdgroups sysvgroups
O_EXCL
O_CREAT 、ファイルが既に存在する場合は、ファイルを生成 開く シンボリックリンクがある場合、それは無視され、ファイルへのポインタに参加します。呼び出しが失敗し、エラーが発生しました。 O_EXCLを 実行するためにこのサービスに依存している壊れたNFSファイルシステム、プログラム上にありますタスクが条件条件の人種が含まれていますロック。ロックファイルを使用してロックアトミックファイルを実行するためのソリューションをして使用し、同じFS(EG、組み込みホスト名とPID)ON固有のファイルを作成することです リンク ロックファイルへのリンクを作成する(2)。 IF リンクは() のロックで、0を返す成功している。そうでなければ、使用 STATを COUNTが2に増加している場合、ロックで、その場合には、ITSを確認してくださいへのリンクでUNIQUEファイルに対して(2)も成功しています。
O_NOCTTY
場合 パス名の 基準端子に基準--- TTYは、 (4)---も制御端末なしで、端末は、制御端末処理にはならないであろう。
O_TRUNC
ファイルが既に存在し、オープンモードが書き込み可能な通常のファイル(すなわち、ファイルが開かれO_RDWRまたはO_WRONLYモード)の場合、ファイルの長さは、既存のコンテンツを廃棄、ゼロに設定されている置く。ファイルである場合FIFOまたは端末デバイスファイル、O_TRUNCフラグは無視されます。O_TRUNC他の役割を具体的に名前が付いていない(しばしば見過ごされている、多くのLinuxディストリビューションでは、他のバージョンではエラーが返されます)
O_APPEND
オープン・ファイルの追加モードでは。で 、書き込み 前に読み込み、ファイルポインタを書き込み、ファイルの末尾に設定されている。IF ASで のlseek O_APPEND 以上のプロセスの一つは、これを一度にデータファイルを追加すると、最後にあるファイルのファイルシステム上では、NFS ONにつながる可能性が破損していますNFSはへの追加サポートしていないためである クライアントのカーネルは競合状態なしで行うことができない、それをシミュレートするために持っているので、ファイル。
O_NONBLOCK O_NDELAY
オープン(開放) のファイルは、ノンブロッキング(非ブロッキング)モードで開くことができます。この場合、ファイルが開いていない、その後の操作のためのファイルディスクリプタを返すことはできませんが、呼び出し側が待つようにします。このモードでは、名前のFIFO(あります参照処理パイプライン) FIFO (4)。また、このモードでは、FIFOに影響を及ぼしません。
O_SYNC
I / Oのファイルの同期を開き、ファイルに任意のファイルディスクリプタ の書き込みは 、データが実際にハードウェアに書き込まれるまで、呼び出しプロセスが中断される原因となります。その他の参照 制限事項を。
O_NOFOLLOW
場合 pathnameが シンボリックリンクで、そしてオープンは、これはFreeBSDの拡張で失敗しglibc2.0.100ライブラリ以来から2.1.126でのLinuxに導入されて以来、ヘッダファイルは、この定義のパラメータに含まれています。...
カーネル2.1。 126は、以前にその使用を無視しました
O_DIRECTORY
場合は 、パス名が ディレクトリではありません、それは開くことができません。このパラメータは、Linux特有であり、2.1.126あなたがFIFOやテープデバイス、サービス拒否の問題を呼び出すが、の実装であってはならないとき避けるために、カーネルに追加 opendir関数の 外での使用。
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

RETURN VALUEザ・

オープンクリート(エラーが発生した場合は-1が返され、新しいファイル・ディスクリプタを返しerrnoにエラーメッセージを設定します)。その注意開いているデバイス特殊ファイルを開くことができますが、しかし、レコード生成作成することはできません、我々は使用する必要があるのmknodを(2)の代わりに。

UIDマッピングとNFSファイル・システムでは、有効なオープンファイル記述子を返しますが、例えばも読んで(2)要求が拒否されてEACCESクライアントが実行するためですオープンアクセス権をチェックしますが、UIDマッピングが読み取りおよび書き込み要求時にサーバによって実行されます。

ファイルが新しく作成された場合、彼のatime(最終アクセス時刻)、CTIME(作成時)、ファイルのmtime(更新時刻)があれば、。CTIMEも同じように変更され、現在の時刻、atimeのの親ディレクトリに他に変更されていますO_TRUNCファイルがパラメータによって変更され、そのCTIME、ファイルのmtimeフィールドは、現在の時間に設定されています。

 

エラーエラーメッセージ

EEXIST
パラメータ O_CREAT O_EXCLが 使用されるが、ファイル(する パス名は )すでに存在しています。
EISDIR
ファイル名( パス名は )ディレクトリですが、それは執筆に来ます。
EACCES

アクセス要求が(不十分な権限)、ファイル名は(許可されていない パス名 のディレクトリを検索は(何の実行権限を許可しません))、ファイルが存在する、または親ディレクトリに書き込み、別のはそうではないことはありません。
ENAMETOOLONG
ファイル名( パス名は )長すぎます
ENOENT
ディレクトリ( パス名 )、または存在しないシンボルの自由端に連結されています。
ENOTDIR
パス名は サブディレクトリではありません
ENXIO
O_NONBLOCK使い方| O_WRONLYファイルを、FIFOという名前の、読み取りのファイルが開いているファイルではありません、またはデバイス固有のファイルを開き、対応するデバイスが存在しません。
ENODEV
ファイル( パス名 )、対応するデバイスの存在なしに、デバイス固有のファイルを参照する(バグLinuxカーネルである- 。ENXIOが返されます)。
EROFS
ファイル( パス名 )読み取り専用ファイルで、別の書き込み操作が要求されています。
ETXTBSY
ファイル( パス名 )が実行されている実行可能ファイルである、別の書き込み動作が要求されます。
EFAULT
パス名 あなたがアクセスすることはできません1のアドレス空間インチ
ELOOP
分解で パス名 際にあまりにも多くのシンボリックリンクに遭遇したかを示している O_NOFOLLOW が、 pathnameが シンボリックリンクであります
ENOSPC
パス名は 作成されるが、デバイスが格納するにはスペースがない パス名 のファイルを
ENOMEM
利用可能なコアメモリ(カーネルメモリ)が十分ではありません
FILE
プログラムによって開かれたファイルの数が最大に達しています
ENFILE
開いているファイルシステムの合計数が限界に達しています 

おすすめ

転載: www.cnblogs.com/fanweisheng/p/11097350.html