C:打开后立即删除临时文件

时间:2016-12-17 09:40:42

标签: c linux unix temp

我试图制作一个临时文件,我想要写一堆东西,然后在收到信号时打印出来。但是,在使用lsof进行一些诊断后,看起来临时文件在打开后立即被删除。请看以下代码段:

FILE *tmp;

int main(int argc, char *argv[]) {

    if ((tmp = tmpfile()) == NULL)
        err_sys("tmpfile error");

    sleep(60);

现在,如果我去ps aux,请获取我的流程的pid,然后执行lsof -p <pid>,我会看到以下内容:

10.06   1159 daniel    3u   REG    0,1     0 10696049115128289 /tmp/tmpfCrM7Jn (deleted)

这对我来说有点令人头疼。考虑到它实际上只是一个内置函数调用,在调用时没有引起错误,我不确定问题是什么。

1 个答案:

答案 0 :(得分:3)

从手册页:

  

在tmpfile()返回之前,创建的文件被取消链接,导致   文件在最后一次引用时自动删除   闭合。

lsof的输出仅表示指向inode的路径已被删除。但是,当前文件句柄FILE *tmp应该仍然有效,直到文件关闭或程序退出。