creat() - 新規ファイルの作成または既存ファイルの再書き込み

標準

標準/拡張機能 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);
}

関連情報