C 中 tmpfile() 的用法

Joh*_*n S 1 c stdio temporary-files

我不明白为什么我的下面的脚本似乎可以在不创建任何文件的情况下工作。

脚本.c:

#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]){
    printf("P_tmpdir is '%s'\n", P_tmpdir);
    FILE *tmp = tmpfile();
    if(tmp == NULL){
        printf("Unable to create temp file");
        exit(1);
    }
    else{
        printf("Temporary file is created\n");
    }
    for(int i = 0; string[i] != '\0'){
        fputc(string[i], tmp);
    }
    rewind(tmp);
    while(!feof(tmp)){
        putchar(fgetc(tmp));
    }
    sleep(3);
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

P_tmpdir 变量返回给我“/tmp”目录,尽管在睡眠期间没有在其中创建新文件...您能帮助我或解释一下吗?

d3L*_*d3L 7

引用cppreference.com(强调我的):

在某些实现上(例如Linux),该函数实际上创建、打开并立即从文件系统中删除文件:只要程序保存了已删除文件的打开文件描述符,该文件就存在,但由于它是删除后,它的名称不会出现在任何目录中,因此没有其他进程可以打开它。

该文件不必在文件系统树中“可见”,只要进程拥有该文件的句柄,该文件就会继续存在。

如果您想要一个在文件系统树中可见的文件,您应该使用mkstemp

  • 这是 Linux 上的常见模式,例如,大多数配置为具有无限滚动历史记录的终端将创建一个用于备份屏幕数据的文件并立即取消链接 (2认同)