Unix-system-calls-creat
[top]#
[[File:]]
[[File:]] |
|Web |This Site
- 初心者向けのUnix *
- Unix-ホーム
- Unix-はじめに
- Unix-ファイル管理
- Unix-ディレクトリ
- Unix-ファイル権限
- Unix-環境
- Unix-基本ユーティリティ
- Unix-パイプとフィルタ
- Unix-プロセス
- Unix-コミュニケーション
- Unix-The Vi Editor
- Unix Shellプログラミング*
- Unix-シェルとは?
- Unix-変数の使用
- Unix-特殊変数
- Unix-配列の使用
- Unix-基本的な演算子
- Unix-意思決定
- Unix-シェルループ
- Unix-ループ制御
- Unix-シェル置換
- Unix-引用メカニズム
- Unix-IOリダイレクト
- UNIX-シェル関数
- Unix-マンページヘルプ
- 高度なUnix *
- Unix-正規表現
- Unix-ファイルシステムの基本
- Unix-ユーザー管理
- Unix-システムパフォーマンス
- Unix-システムログ
- Unix-信号とトラップ
- Unixの便利なリファレンス*
- Unix-便利なコマンド
- Unix-クイックガイド
- Unix-組み込み関数
- Unix-システムコール
- Unix-コマンドリスト
- Unixの役立つリソース*
- Unix役立つリソース
選択した読書
- http://www.finddevguides.com/computer_glossary [コンピュータ用語集] *http://www.finddevguides.com/computer_whoiswho[Who is Who]
Copyright©2014 by finddevguides
Home | References | Discussion Forums | About TP |
open()-Unix、Linuxシステムコール
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]
広告
NAME
open、creat-ファイルまたはデバイスを開き、場合によっては作成します
概要
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char* pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int creat(const char *pathname, mode_t mode); |
説明
ファイルの_pathname_を指定すると、 open ()はファイル記述子、後続のシステムコールで使用するための非負の小さな整数( read (2)、 write (2)、 lseek (2 )、 fcntl (2)など)。 成功した呼び出しによって返されるファイル記述子は、プロセスに対して現在開いていない最も小さい番号のファイル記述子になります。
新しいファイル記述子は、 execve (2)で開いたままになるように設定されます(つまり、 fcntl (2)で説明されている FD_CLOEXEC ファイル記述子フラグは最初は無効になっています)。 ファイルオフセットは、ファイルの先頭に設定されます( lseek (2)を参照)。
パラメーター_flags_には、 O_RDONLY 、 O_WRONLY 、または* O_RDWR。*のいずれかの_access mode_のいずれかを含める必要があります。これらの要求は、それぞれ、ファイルを読み取り専用、書き込み専用、または読み取り/書き込みで開きます。
さらに、0個以上のファイル作成フラグとファイルステータスフラグをビット単位で(または_flags_に)挿入できます。 _ファイル作成フラグ_は、 O_CREAT 、 O_EXCL 、 O_NOCTTY 、および O_TRUNC です。 _file status flags_は、以下にリストされている残りのフラグのすべてです。 これらの2つのフラググループの違いは、 fcntl (2)を使用してファイルステータスフラグを取得し、(場合によっては)変更できることです。
ファイル作成フラグとファイルステータスフラグの完全なリストは次のとおりです。
エラーコード
説明
ファイルは追加モードで開かれます。 各 write ()の前に、 lseek ()の場合と同様に、ファイルオフセットがファイルの末尾に配置されます。 O_APPEND は、複数のプロセスが一度にファイルにデータを追加すると、NFSファイルシステム上のファイルが破損する可能性があります。 これは、NFSがファイルへの追加をサポートしていないため、クライアントカーネルがそれをシミュレートする必要があるためです。これは競合状態なしでは実行できません。
信号駆動型I/Oを有効にします。このファイル記述子で入力または出力が可能になったときに、信号(デフォルトではSIGIOですが、これは fcntl (2)で変更できます)を生成します。 この機能は、端末、擬似端末、ソケット、および(Linux 2.6以降)パイプおよびFIFOでのみ使用可能です。 詳細については、 fcntl (2)を参照してください。
ファイルが存在しない場合は作成されます。 ファイルの所有者(ユーザーID)は、プロセスの有効なユーザーIDに設定されます。 グループの所有権(グループID)は、プロセスの有効なグループIDまたは親ディレクトリのグループIDに設定されます(ファイルシステムのタイプとマウントオプション、および親ディレクトリのモードに依存します。たとえば、 mount (8)で説明されているext2ファイルシステムのオプション_bsdgroups_および_sysvgroups_。
このファイルとの間のI/Oのキャッシュ効果を最小限に抑えるようにしてください。 一般に、これはパフォーマンスを低下させますが、アプリケーションが独自のキャッシュを実行する場合など、特別な状況で役立ちます。 ファイルI/Oは、ユーザー空間のバッファーとの間で直接行われます。 I/Oは同期です。つまり、 read (2)または write (2)が完了すると、データが転送されたことが保証されます。 Linux 2.4では、転送サイズ、およびユーザーバッファーとファイルオフセットのアライメントは、すべてファイルシステムの論理ブロックサイズの倍数でなければなりません。 Linux 2.6では、アライメントはデバイスのブロックサイズに適合する必要があります。
ブロックデバイス用のセマンティック上類似した(非推奨の)インターフェイスは、 raw (8)で説明されています。
_pathname_がディレクトリではない場合、オープンに失敗します。 このフラグはLinux固有であり、カーネルバージョン2.1.126で追加されました。これは、 opendir (3)がFIFOまたはテープデバイスで呼び出された場合にサービス拒否の問題を回避しますが、実装以外では使用しないでください opendir の。
(LFS)サイズが_off_t_で表現できない(ただし、_off64_t_で表現できる)ファイルを開くことができます。
(Linux 2.6.8以降)ファイルが read (2)の場合、ファイルの最終アクセス時刻(inodeのst_atime)を更新しないでください。 このフラグは、インデックス作成またはバックアッププログラムで使用するためのもので、使用するとディスクアクティビティの量を大幅に削減できます。 このフラグは、すべてのファイルシステムで有効なわけではありません。 1つの例は、サーバーがアクセス時間を管理するNFSです。
_pathname_が端末デバイスを参照している場合( tty (4)を参照)、プロセスに端末がない場合でも、プロセスの制御端末にはなりません。
_pathname_がシンボリックリンクの場合、オープンは失敗します。 これは、バージョン2.1.126でLinuxに追加されたFreeBSD拡張機能です。 パス名の以前のコンポーネントのシンボリックリンクは引き続き使用されます。
可能な場合、ファイルは非ブロックモードで開かれます。 open ()も、返されるファイル記述子に対する後続の操作も、呼び出しプロセスを待機させません。 FIFO(名前付きパイプ)の処理については、 fifo (7)も参照してください。 必須のファイルロックおよびファイルリースと組み合わせた O_NONBLOCK の効果については、 fcntl (2)を参照してください。
ファイルは同期I/O用に開かれます。 結果のファイル記述子の write ()は、データが基礎となるハードウェアに物理的に書き込まれるまで呼び出しプロセスをブロックします。 ただし、以下の制限事項を参照してください。
ファイルが既に存在し、通常のファイルであり、オープンモードで書き込みが許可されている(つまり、O_RDWRまたはO_WRONLY)場合、長さ0に切り捨てられます。 ファイルがFIFOまたは端末デバイスファイルである場合、O_TRUNCフラグは無視されます。 それ以外の場合、O_TRUNCの効果は指定されていません。
これらのオプションフラグの一部は、ファイルを開いた後に fcntl ()を使用して変更できます。
引数_mode_は、新しいファイルが作成された場合に使用する許可を指定します。 プロセスの umask によって通常の方法で変更されます。作成されたファイルの許可は*(mode&〜umask)です。 このモードは、新しく作成されたファイルの今後のアクセスにのみ適用されることに注意してください。読み取り専用ファイルを作成する *open ()呼び出しは、読み取り/書き込みファイル記述子を返す可能性があります。
次の記号定数が提供されます
モード:
00700ユーザー(ファイル所有者)には読み取り、書き込み、実行の許可があります
00400ユーザーには読み取り許可があります
00200ユーザーには書き込み権限があります
00100ユーザーには実行権限があります
00070グループには読み取り、書き込み、実行の許可があります
00040グループには読み取り権限があります
00020グループには書き込み権限があります
00010グループには実行権限があります
00007他には読み取り、書き込み、実行の許可があります
00004他には読み取り許可があります
00002他には書き込み許可があります
00001他には実行権限があります
返り値
ノート
UIDマッピングが有効なNFSファイルシステムでは、 open ()はファイル記述子を返しますが、 read (2)要求は EACCES で拒否されます。 これは、クライアントが権限をチェックして open ()を実行するが、UIDマッピングは読み取りおよび書き込み要求時にサーバーによって実行されるためです。
ファイルが新しく作成された場合、そのst_atime、st_ctime、st_mtimeフィールド(それぞれ、最終アクセス時刻、最終ステータス変更時刻、最終変更時刻。 stat (2)を参照)は現在時刻に設定されます。親ディレクトリのst_ctimeおよびst_mtimeフィールドも同様です。 それ以外の場合、O_TRUNCフラグのためにファイルが変更されると、そのst_ctimeおよびst_mtimeフィールドは現在の時刻に設定されます。
エラー
Error Code | Description |
---|---|
*EACCES * | The requested access to the file is not allowed, or search permission is denied for one of the directories in the path prefix of pathname, or the file did not exist yet and write access to the parent directory is not allowed. (See also* path_resolution*(2).) |
*EEXIST * | pathname already exists and* O_CREAT and O_EXCL* were used. |
EFAULT | pathname points outside your accessible address space. |
*EISDIR * | pathname refers to a directory and the access requested involved writing (that is,* O_WRONLY or O_RDWR* is set). |
*ELOOP * | Too many symbolic links were encountered in resolving pathname, or* O_NOFOLLOW* was specified but pathname was a symbolic link. |
EMFILE | The process already has the maximum number of files open. |
ENAMETOOLONG | pathname was too long. |
ENFILE | The system limit on the total number of open files has been reached. |
ENODEV | pathname refers to a device special file and no corresponding device exists. (This is a Linux kernel bug; in this situation ENXIO must be returned.) |
ENOENT | O_CREAT is not set and the named file does not exist. Or, a directory component in pathname does not exist or is a dangling symbolic link. |
ENOMEM | Insufficient kernel memory was available. |
ENOSPC | pathname was to be created but the device containing pathname has no room for the new file. |
*ENOTDIR * | A component used as a directory in pathname is not, in fact, a directory, or* O_DIRECTORY* was specified and pathname was not a directory. |
ENXIO | O_NONBLOCK |
O_WRONLY is set, the named file is a FIFO and no process has the file open for reading. Or, the file is a device special file and no corresponding device exists. | EOVERFLOW |
pathname refers to a regular file, too large to be opened; see O_LARGEFILE above. | *EPERM * |
The* O_NOATIME* flag was specified, but the effective user ID of the caller did not match the owner of the file and the caller was not privileged (CAP_FOWNER). | EROFS |
pathname refers to a file on a read-only filesystem and write access was requested. | ETXTBSY |
pathname refers to an executable image which is currently being executed and write access was requested. | *EWOULDBLOCK * |
NOTE
Linuxでは、O_NONBLOCKフラグは開くことを望んでいるが、必ずしも読み取りまたは書き込みの意図があるとは限らないことを示します。 これは通常、 ioctl (2)で使用するファイル記述子を取得するためにデバイスを開くために使用されます。
準拠
SVr4、4.3BSD、POSIX.1-2001。 O_NOATIME 、 O_NOFOLLOW 、および O_DIRECTORY フラグはLinux固有です。 定義を取得するには、 _ GNU_SOURCE マクロを定義する必要がある場合があります。
FreeBSD 4.xは同じ名前のフラグを導入しましたが、アライメントの制限はありません。 Linuxのカーネルバージョン2.4.10でサポートが追加されました。 古いLinuxカーネルは、このフラグを単に無視します。 定義を取得するには、 _ GNU_SOURCE マクロを定義する必要があります。
BUGS
「O_DIRECTについて私をいつも悩ませてきたのは、インターフェイス全体が馬鹿げていることであり、恐らくいくつかの深刻な心を制御する物質に関する混乱した猿によって設計されたということです。」 —ライナス
現在、 open ()を呼び出すときに O_ASYNC を指定して、信号駆動型I/Oを有効にすることはできません。このフラグを有効にするには、 fcntl (2)を使用します。
制限事項
NFSの基礎となるプロトコルには多くの不備があり、特に O_SYNC および O_NDELAY に影響を及ぼします。
POSIXは、フラグ O_SYNC 、 O_DSYNC 、および O_RSYNC に対応する、同期I/Oの3つの異なるバリアントを提供します。 現在(2.1.130)これらはすべてLinuxの同義語です。
関連項目
- http://www.finddevguides.com/unix_system_calls/close [閉じる(2)]
- dup(2)
- fcntl(2)
- http://www.finddevguides.com/unix_system_calls/link [リンク(2)]
- lseek(2)
- mknod(2)
- mount(2)
- mmap(2)
- openat(2)
- path_resolution(2)
- read(2)
- socket(2)
- stat(2)
- umask(2)
- unlink(2)
- write(2)
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]
広告
Advertisements |