標準
標準/拡張機能 |
C/C++ |
依存項目 |
POSIX.1
XPG4
XPG4.2
Single UNIX Specification、バージョン 3
|
両方 |
|
形式
#define _POSIX_SOURCE
#include <fcntl.h>
int creat(const char *pathname, mode_t mode);
機能説明
関数呼び出しの
creat(pathname,mode) は、次の呼び出しと等価です。
open(pathname, O_CREAT|O_WRONLY|O_TRUNC, mode);
このようにして、pathname で命名された
ファイルは、既に存在しない限り作成されます。次に、そのファイルは書き込み専用でオープンされ、ゼロ長に切り捨てられます。詳細は、open() — ファイルのオープン を参照してください。
mode 引数は、ファイルの作成で使用されるファイル許可ビットを指定します。以下に示すのは、mode に使用することができる
シンボルのリストです。
- S_IRGRP
- ファイルのグループ用の読み取り許可。
- S_IROTH
- ファイル所有者以外のユーザー用の読み取り許可。
- S_IRUSR
- ファイル所有者用の読み取り許可。
- S_IRWXG
- ファイル・グループ用の読み取り、書き込み、および検索、または実行の許可。S_IRWXG は、S_IRGRP、S_IWGRP、および S_IXGRP のビット単位の包含 OR です。
- S_IRWXO
- ファイル所有者以外のユーザー用の
読み取り、書き込み、および検索、または実行の許可。S_IRWXO は、S_IROTH、S_IWOTH、および S_IXOTH
のビット単位の包含 OR です。
- S_IRWXU
- ファイル所有者用に読み取り、書き込み、および探索または実行を行います。S_IRWXG は、S_IRUSR、S_IWUSR、および S_IXUSR のビット単位の包含 OR です。
- S_ISGID
- 実行用のグループ ID (GID) を設定する特権。exec 関数によりこのファイルが実行される場合は、プロセスの有効グループ ID がファイルのグループ ID に
設定されます。その結果、プロセスには、実際の呼び出し元の
権限ではなく、ファイル所有者と同じ権限を持ちます。
- S_ISUID
- 実行用のユーザー ID (UID) を設定する特権。exec 関数によりこのファイルが実行される場合は、プロセスの有効ユーザー ID がファイルの所有者に
設定されます。その結果、プロセスには、実際の呼び出し元の
権限ではなく、ファイル所有者と同じ権限を持ちます。
- S_ISVTX
- 共用テキストを指示します。実行可能ファイルとしてストレージにロードしたままにしてください。
- S_IWGRP
- ファイルのグループ用の書き込み許可。
- S_IWOTH
- ファイル所有者以外のユーザー用の書き込み許可。
- S_IWUSR
- ファイル所有者用の書き込み許可。
- S_IXGRP
- ファイルのグループ用の検索許可 (ディレクトリーの場合) または
実行許可 (ファイルの場合)。
- S_IXOTH
- ファイル所有者以外のユーザー用の検索許可 (ディレクトリーの場合) または実行許可 (ファイルの場合)。
- S_IXUSR
- ファイル所有者用の検索許可 (ディレクトリーの場合) または
実行許可 (ファイルの場合)。
z/OS UNIX の大規模ファイルのサポート: AMODE 64 C/C++ アプリケーションの場合は、z/OS UNIX の大規模ファイルが自動的にサポートされます。AMODE 31 C/C++ アプリケーションは、オプション LANGLVL(LONGLONG) を指定してコンパイルされなければなりません。また、ヘッダーがインクルードされる前に _LARGE_FILES フィーチャー・テスト・マクロを定義して、2 GB のサイズより大きい z/OS UNIX ファイルをこの関数が操作できるようにしなければなりません。ファイル・サイズとオフセット・フィールドは、63 ビットの幅に拡張されます。したがって、_LARGE_FILES フィーチャー・テスト・マクロの定義も行うには、ファイルを操作する他のいずれかの関数が必要です。
戻り値
正常に実行された場合、creat() は、オープン・ファイルのファイル記述子
を戻します。
正常に実行されなかった場合、creat() は -1 を戻して、errno を次のいずれかの
値に設定します。
- エラー・コード
- 説明
- EACCES
- 次のエラー条件のいずれかが存在しています。
- プロセスには、pathname のコンポーネントに関する
検索許可がありません。
- ファイルは存在するが、プロセスには、フラグで
指定された方法でファイルをオープンする適切な許可がありません。
- ファイルは存在せず、プロセスにはファイルが作成される
ディレクトリーに対する書き込み許可がありません。
- O_TRUNC は指定されたが、プロセスにはファイルに対する書き込み許可がありません。
- EINTR
- open() がシグナルで割り込まれました。
- EISDIR
- pathname はディレクトリーであり、options で
書き込みアクセスまたは読み取り/書き込みアクセスが指定されています。
- ELOOP
- ループがシンボリック・リンクに存在しています。このエラーが出されるのは、pathname 解決で検出されたシンボリック・リンクの数が POSIX_SYMLOOP より大きい場合です。
- EMFILE
- プロセスがオープンできるファイル記述子の最大数に達しています。
- ENAMETOOLONG
- _POSIX_NO_TRUNC が有効ですが、pathname が PATH_MAX 文字より長いか、または pathname の一部のコンポーネントが NAME_MAX 文字より長くなっています。シンボリック・リンクの場合、pathname
引数でシンボリック・リンクに置き換えられた pathname
ストリングの長さが、PATH_MAX を超えると、このエラーが発生します。PATH_MAX および NAME_MAX の値は、pathconf() を使用して判別できます。
- ENFILE
- システムがオープンできるファイル記述子の最大数に達しています。
- ENOENT
- O_CREAT が指定されているが、パス接頭部が存在しないか、または pathname 引数が空ストリングです。
- ENOSPC
- 新規ファイルを保持するには、ディレクトリーまたは
ファイル・システムのスペースが不十分です。
- ENOTDIR
- pathname のコンポーネントがディレクトリーではありません。
- EOVERFLOW
- 名前付きファイルは通常のファイルであり、ファイルのサイズは、off_t 型のオブジェクトでは正しく表すことができません。
- EROFS
- pathname は読み取り専用ファイル・システムにあります。
例
CELEBC28 ⁄* CELEBC28
This example creates a file.
*⁄
#define _POSIX_SOURCE
#include <fcntl.h>
#include <sys⁄types.h>
#include <sys⁄stat.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>
main() {
char fn[]="creat.file", text[]="This is a test";
int fd;
if ((fd = creat(fn, S_IRUSR | S_IWUSR)) < 0)
perror("creat() error");
else {
write(fd, text, strlen(text));
close(fd);
unlink(fn);
}
return(fd);
}