名前空間
変種
操作

std::tmpfile

提供: cppreference.com
< cpp‎ | io‎ | c
 
 
入出力ライブラリ
入出力マニピュレータ
Cスタイルの入出力
バッファ
(C++98で非推奨)
ストリーム
抽象
ファイル入出力
文字列入出力
配列入出力
(C++98で非推奨)
(C++98で非推奨)
(C++98で非推奨)
同期化出力
エラーカテゴリインタフェース
(C++11)
 
C スタイルの入出力
型とオブジェクト
関数
ファイルアクセス
直接入出力
書式なし入出力
書式付き入力
書式付き出力
ファイル位置操作
エラー処理
ファイルに対する操作
tmpfile
 
ヘッダ <cstdio> で定義
std::FILE* tmpfile();

自動生成された一意なファイル名を持つ一時ファイルを作成して開きます。

ファイルは (アクセスモードに "wb+" を指定した std::fopen によって行われたかのように) 更新用にバイナリファイルとして開かれます。 少なくとも TMP_MAX 個のファイルをプログラムの生存期間中に開くことができます (この制限は std::tmpnam と共有されているかもしれず、さらに FOPEN_MAX によって制限されるかもしれません)。

プログラムがファイルを閉じた場合 (例えば std::fclose を実行することによって)、ファイルは自動的に削除されます。

プログラムが正常終了した場合 (std::exit を呼ぶ、または main から戻るなどによって)、 std::tmpfile によって開かれたすべてのファイルは自動的に削除されます。

プログラムが異常終了した場合、これらの一時ファイルが削除されるかどうかは処理系定義です。

目次

[編集] 引数

(なし)

[編集] 戻り値

紐付けられたファイルストリーム、またはエラーが発生した場合は NULL

[編集] ノート

処理系によっては (Linux など)、この関数はファイルシステム上に実際にファイルを作成し、開き、そして直ちに削除します。 削除されたファイルへの開いているファイルディスクリプタがプログラムによって保持されている限りそのファイルは存在しますが、削除されているためいかなるディレクトリ内にもその名前は現れず、そのため他のプロセスが開くことはできません。 ファイルディスクリプタが閉じられれば、そのファイルが占めていた空間はファイルシステムによって回収されます。

処理系によっては (Windows など)、この関数がシステムディレクトリ内に一時ファイルを作成することができるように、特権の昇格が要求されます。

[編集]

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <filesystem>
namespace fs = std::filesystem;
 
int main()
{
    std::FILE* tmpf = std::tmpfile();
    std::fputs("Hello, world", tmpf);
    std::rewind(tmpf);
    char buf[6];
    std::fgets(buf, sizeof buf, tmpf);
    std::cout << buf << '\n';
 
    // tmpfile の名前を表示する Linux 特有の方法
    std::cout << fs::read_symlink(
                     fs::path("/proc/self/fd") / std::to_string(fileno(tmpf))
                 ) << '\n';
}

出力例:

Hello
"/tmp/tmpfBlY1lI (deleted)"

[編集] 関連項目

一意なファイル名を返します
(関数) [edit]
テンポラリファイルに適したディレクトリを返します
(関数) [edit]