Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       mkstemp, mkostemp, mkstemps, mkostemps - 他と重ならない名前を持つ一時ファイルを作成する

書式

       #include <stdlib.h>

       int mkstemp(char *template);

       int mkostemp(char *template, int flags);

       int mkstemps(char *template, int suffixlen);

       int mkostemps(char *template, int suffixlen, int flags);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       mkstemp():
           _XOPEN_SOURCE >= 500
               || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
               || /* Glibc versions <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

       mkostemp(): _GNU_SOURCE
       mkstemps():
           /* Glibc since 2.19: */ _DEFAULT_SOURCE
               || /* Glibc versions <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
       mkostemps(): _GNU_SOURCE

説明

       関数  mkstemp()  は引数 template から他と重ならない一時ファイル名を生成し、 そのファイルの
       作成とオープンを行い、 そのファイルに対するオープン済みのファイルディスクリプターを返す。

       引数 template で指示する文字列の後ろの 6 文字は XXXXXX である必要がある。 この部分がファイ
       ル名を他と重ならないようにする文字で置き換えられる。 template は書き換えられるため、文字列
       定数ではなく文字配列として 宣言するようにしなければならない。

       ファイルは許可モード 0600 で作成され、所有者のみが読み書き可能である。返されるファイルディ
       スクリプターで、このファイルへの読み書き両方のアクセスが 可能である。 呼び出し者がそのファ
       イルを作成するプロセスであることを保証するために、 ファイルは open(2)  の O_EXCL  フラグ付
       きでオープンされる。

       mkostemp() 関数は mkstemp() と同様だが、 flagsO_APPEND, O_CLOEXEC, O_SYNC のビットを指
       定できる点が異なる (意味は  open(2)  と同じである)。ファイルを作成する際、  mkostemp()  は
       open(2) に渡す flags 引数に O_RDWR, O_CREAT, O_EXCL を含める。そのため、 mkostemp() に渡す
       flags 引数にこれらの値を含める必要はなく、システムによってはエラーが発生する点に注意するこ
       と。

       mkstemps() 関数は mkstemp() と同様だが、 template 内の文字列に長さ が suffixlen 文字の接尾
       辞 (suffix) が含まれる点が異なる。 したがって、 templateprefixXXXXXXsuffix  の形式とな
       る。 文字列 XXXXXX の部分は mkstemp() により更新される。

       mkostemps() と mkstemps() の関係は、 mkostemp() と mkstemp() の関係と同じである。

返り値

       成功すると、これらの関数は一時ファイルのファイルディスクリプターを返す。      エラーの場合
       は、-1 を返し、 errno を適切に設定する。

エラー

       EEXIST すでに同じ名前を持つファイルが存在した。 template の内容は不定である。

       EINVAL mkstemp() と mkostemp() の場合: template の最後の 6 文字が XXXXXX でなかった。 この
              場合、template は変更されない。

              mkstemps()  と  mkostemps()  の場合:  template  の長さが (6 + suffixlen) 文字より短
              い、または template の接尾辞の直前の 6 文字が XXXXXX ではなかった。

       これらの関数は open(2) に書かれているエラーのいずれかで失敗することもある。

バージョン

       mkostemp() は glibc 2.7 以降で利用できる。 mkstemps() と mkostemps() は glibc 2.11  以降で
       利用できる。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌────────────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├────────────────────────┼───────────────┼─────────┤
       │mkstemp(), mkostemp(),  │ Thread safety │ MT-Safe │
       │mkstemps(), mkostemps() │               │         │
       └────────────────────────┴───────────────┴─────────┘

準拠

       mkstemp(): 4.3BSD, POSIX.1-2001.

       mkstemps(): 標準化されていないが、他のいくつかのシステムにも存在する。

       mkostemp() と mkostemps(): glibc による拡張。

注意

       glibc バージョン 2.06 以前では、ファイルは許可モード 0666 で作成され、全てのユーザーが読み
       書き可能であった。この古い動作は、 セキュリティ上のリスクになり得る。特に、他の UNIX  では
       許可モードとして 0600 を使うため、プログラムを移植する際、この細かな違いを見落とす可能性が
       あるからだ。 POSIX.1-2008 では、ファイルを許可モード 0600 で作成することが必須要件として追
       加された。

       より一般的には、 mkstemp()  の POSIX 規定ではファイルモードについて何も述べていない。 従っ
       て、アプリケーションは mkstemp()  (や mkostemp())   を呼び出す前にファイルモード生成マスク
       (umask(2)  参照) が適切に設定されているか確認するべきである。

関連項目

       mkdtemp(3), mktemp(3), tempnam(3), tmpfile(3), tmpnam(3)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。