tmpfile, tmpfile_s
提供: cppreference.com
ヘッダ <stdio.h> で定義 | ||
FILE*tmpfile(void); | (1) | |
errno_t tmpfile_s(FILE*restrict*restrict streamptr); | (2) | (C11以上) |
1) 一時ファイルを作成して開きます。 ファイルは (
"wb+"
モードを使用して fopen によって行われたかのように) 更新用にバイナリファイルとして開かれます。 ファイルのファイル名はファイルシステム内で一意であることが保証されます。 少なくとも TMP_MAX 個のファイルをプログラムの生存期間中に開くことができます (この制限は tmpnam と共有されているかもしれず、さらに FOPEN_MAX によって制限されるかもしれません)。2)(1) と同じですが、少なくとも TMP_MAX_S 個のファイルを開くことができ (この制限は tmpnam_s と共有されているかもしれません)、
streamptr
がヌルポインタの場合は、現在設定されている制約ハンドラ関数が呼ばれます。 - すべての境界チェック付き関数と同様に、
tmpfile_s
は __STDC_LIB_EXT1__ が処理系によって定義されていて、<stdio.h>
をインクルードする前にユーザが __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義した場合にのみ、利用可能であることが保証されます。
この関数によって作成された一時ファイルは、プログラムが正常終了したときに閉じられ削除されます。 異常終了したときに削除されるかどうかは処理系定義です。
目次 |
[編集]引数
1) (なし)
2) この関数呼び出しによって更新されるポインタへのポインタ。
[編集]戻り値
1) ファイルに紐付けられたファイルストリームを指すポインタ、またはエラーが発生した場合はヌルポインタ。
2) ファイルを作成して開くことに成功した場合はゼロ。 ファイルを作成できなかったか開くことができなかった場合、または
streamptr
がヌルポインタの場合は非ゼロ。 さらに、成功した場合は紐付けられたファイルストリームを指すポインタが *streamptr
に格納され、エラーの場合はヌルポインタ値が *streamptr
に格納されます。[編集]ノート
処理系によっては (Linux など)、この関数はファイルシステム上に実際にファイルを作成し、開き、そして直ちに削除します。 削除されたファイルへの開いているファイルディスクリプタがプログラムによって保持されている限りそのファイルは存在しますが、削除されているためいかなるディレクトリ内にもその名前は現れず、そのため他のプロセスが開くことはできません。 ファイルディスクリプタが閉じられるか、プログラムが終了すれば (正常でも異常でも)、そのファイルが占めていた空間はファイルシステムによって回収されます。
処理系によっては (Windows など)、この関数がシステムディレクトリ内に一時ファイルを作成することができるように、特権の昇格が要求されます。
[編集]例
Run this code
#define _POSIX_C_SOURCE 200112L#include <stdio.h>#include <unistd.h> int main(void){FILE* tmpf = tmpfile();fputs("Hello, world", tmpf);rewind(tmpf);char buf[6];fgets(buf, sizeof buf, tmpf);printf("got back from the file: '%s'\n", buf); // Linux-specific method to display the tmpfile namechar fname[FILENAME_MAX], link[FILENAME_MAX]={0};sprintf(fname, "/proc/self/fd/%d", fileno(tmpf));if(readlink(fname, link, sizeof link -1)>0)printf("File name: %s\n", link);}
出力例:
got back from the file: 'Hello' File name: /tmp/tmpfjptPe5 (deleted)
[編集]参考文献
- C17 standard (ISO/IEC 9899:2018):
- 7.21.4.3 The tmpfile function (p: 222)
- K.3.5.1.1 The tmpfile_s function (p: 427)
- C11 standard (ISO/IEC 9899:2011):
- 7.21.4.3 The tmpfile function (p: 303)
- K.3.5.1.1 The tmpfile_s function (p: 586-587)