名称
creat ― 新しいファイルの作成、または既存のファイルの書直し
構文
#include <fcntl.h>
int creat(const char *path, mode_t mode);
説明
creat() システムコールは、パス名 path で指定された通常のファイルを新規作成します。または
既存のファイルを書き直す準備をします。
ファイルが存在する場合は、ファイルの長さは 0 に切り捨てられますが、
モードと所有者は変更されません。 ファイルが存在しない場合は、ファイルの所有者
ID は、プロセスの実効ユーザー ID がセットされます。 親ディレクトリのセットグループ
ID ビットがセットされた場合は、ファイルのグループ ID に親ディレクトリのグループ
ID がセットされます。 それ以外の場合は、ファイルのグループ ID にプロセスの有効グループ
ID がセットされます。 ファイルモードの下位 12 ビットには、次のように修正された mode の値がセットされます。
プロセスのファイルモード作成マスクでセットされたすべてのビットは、
クリアされます umask(2)参照)。
モードの「実行後テキストイメージのセーブ」ビットは、クリアされます chmod(2)参照)。
64 ビットモードでシステムコールが呼び出されると、 O_LARGEFILE ステータスフラグが自動的にセットされます (fcntl(5) または open(2) を参照)。
正常終了すると、ファイル記述子を返し、 mode が書込みを許可していない場合でも、書込み用 (専用) のファイルを開きます。
ファイルのオフセットは、ファイルの先頭にセットされます。 ファイル記述子は、 exec*() システムコールを実行した後も開かれたままです fcntl(2) 参照)。 各プロセスが同時に開くことのできるファイルの数には制限があります。
開くことのできるファイルの制限については、 getrlimit(2) を参照してください。 open(2) も参照してください。 書込み禁止モードの新しいファイルを作成することもできます。
アクセス制御リスト (ACL)
- HFS ファイルシステムのみ
アクセス制御リストをサポートしているシステムでは、 ファイルアクセス
パーミッションビットに応じて 3 つの基本 ACL エントリーが作成されます。
既存ファイルのアクセス制御リストは、 creat() では変更されません setacl(2)、 chmod(2)、 および acl(5) 参照)。
戻り値
creat() は、次の値を返します。
| n | | 正常終了。 n はファイル記述子の値です。 n は負でない整数です。 |
| -1 | | 異常終了。 エラーを示す値が errno にセットされます。 |
エラー
creat() が異常終了した場合、次の値の 1 つが errno にセットされます。
| EACCES | | パスプリフィックスの構成要素がサーチパーミッションを拒否された場合 |
| EACCES | | ファイルが存在しておらず、ファイルを作成するディレクトリが書込みを
許可していない場合 |
| EACCES | | ファイルが存在しており、書込みパーミッションが拒否された場合 |
| EAGAIN | | ファイルが存在しており、強制モードファイルとレコードロックが セットされており、ファイルのレコードロックが解除されていない場合 |
| EDQUOT | | ファイルシステムのユーザーのディスク割当てブロックまたは i ノードの限界に
達した場合 |
| EFAULT | | path がプロセスに割り当てられたアドレス空間の外側を指している場合。
このエラーが発見できるかどうかは、実現方法に依存しています。 |
| EISDIR | | 指定されたファイルが既存のディレクトリである場合 |
| ELOOP | | パス名にたどったシンボリックリンクが多すぎる場合 |
| EMFILE | | ファイル記述子の最大値を超えるファイルが開かれている場合 |
| ENAMETOOLONG | | _POSIX_NO_TRUNC が有効なときに、
指定されたパス名の長さが PATH_MAX バイトを超えている場合、またはパス名の構成要素の長さが NAME_MAX バイトを超えている場合 |
| ENFILE | | システム ファイルテーブルがいっぱいである場合 |
| ENOENT | | 指定されたファイルが存在していない場合 path が null である場合、または path の構成要素が存在していない場合) |
| ENOSPC | | ファイルシステムに十分な領域がない場合 |
| ENOTDIR | | パスプリフィックスの構成要素がディレクトリでない場合 |
| ENXIO | | 指定されたファイルがキャラクタ型特殊ファイルかブロック型特殊ファイルで、
この特殊ファイルに関連するデバイスが存在していない場合 |
| EOVERFLOW | | 指定されたファイルが通常のファイルで、そのファイルのサイズを off_t 型のオブジェクトで正確に示すことができない場合 |
| EROFS | | 指定されたファイルが読取り専用ファイルシステム上にある場合 |
| ETXTBSY | | ファイルが実行中のピュアプロシジャ (共有テキスト) ファイルである場合 |
参照
chmod(2), close(2), creat64(2), dup(2), fcntl(2), lockf(2),
lseek(2), open(2), open64(2), read(2), setacl(2), truncate(2), umask(2),
write(2), acl(5),aclv(5)
標準準拠
creat(): AES, SVID2, SVID3, XPG2, XPG3,
XPG4, FIPS 151-2, POSIX.1