Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:打开后立即删除临时文件_C_Linux_Unix_Temp - Fatal编程技术网

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

C:打开后立即删除临时文件,c,linux,unix,temp,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,然后执行一个ls

我正在尝试制作一个临时文件,我想在其中写入一些内容,然后在收到信号后打印出来。但是,在使用
lsof
进行一些诊断后,临时文件似乎在打开后立即被删除。以以下片段为例:

FILE *tmp;

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

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

    sleep(60);
现在,如果我执行一个
ps aux
,获取进程的pid,然后执行一个
lsof-p
,我会看到以下内容:

10.06   1159 daniel    3u   REG    0,1     0 10696049115128289 /tmp/tmpfCrM7Jn (deleted)
这对我来说有点扫兴。考虑到它实际上只是一个内置函数调用,调用时不会导致错误,我不确定问题出在哪里。

从手册页:

创建的文件在tmpfile()返回之前取消链接,导致 上次引用时自动删除的文件 关闭


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

从手册页:“在tmpfile()返回之前,已创建的文件已解除链接,导致在关闭对该文件的最后一次引用时自动删除该文件。”不过我应该还能读写它。取消链接只意味着指向inode的路径被删除,当前的文件句柄
file*tmp
应该仍然有效,直到@alk说,我调用
fclose
或者程序退出。我现在确实明白了为什么
lsof
说它被删除了,因为指向它的文件路径消失了,但是文件句柄仍然是打开的(这就是为什么它首先出现在
lsof
中的原因)。如果你不能读或写它,那么你需要用写和读的代码发布一篇文章。@user3386109我做的事情和你差不多哈哈,很好:)