名前空間
変種
操作

std::tmpfile

提供: cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
ヘッダ <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';
 
    // Linux-specific method to display the tmpfile name
    std::cout << fs::read_symlink(
                     fs::path("/proc/self/fd") / std::to_string(fileno(tmpf))
                 ) << '\n';
}

出力例:

Hello
"/tmp/tmpfBlY1lI (deleted)"

[編集] 関連項目

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