c - 当删除使用 mkstemp() 创建的文件时?

标签 c linux temporary-files

我有一个调用 mkstemp() 的程序,用返回的 fd 写一些东西,然后关闭 fd。我希望文件一直保留到我自己删除它为止!使用诸如 rm 命令之类的东西。我的问题是:Linux 在 close(fd) 后会删除这个文件吗?

最佳答案

will Linux delete this file after close(fd)?

不是自动的。您需要手动对该文件调用 unlink 。如果您不需要按名称访问文件(即通过文件系统),您可以在调用 mkstemp 后立即执行此操作——一旦描述符关闭,它就会被删除。

或者,如果您需要按名称将文件传递给代码(或进程)的另一部分,请不要立即调用 unlink

这是一个示例工作流程:

char filename[] = "tempfile-XXXXXX";
int fd;
if ((fd = mkstemp(filename)) == -1) {
    fprintf(stderr, "Failed with error %s\n", strerror(errno));
    return -1;
}

unlink(filename);

FILE *fh = fdopen(fd, "w");
fprintf(fh, "It worked!\n");
fclose(fh);

fclose 关闭 FILE* 流,也关闭底层文件描述符,因此我们不需要显式调用 close(fd).

必要的标题:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

关于c - 当删除使用 mkstemp() 创建的文件时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445579/

相关文章:

c++ - 如何等待子进程真正启动

与 6 字节长的零字符串进行比较

c - 如何使用AddToArray这个函数?

linux - libreoffice 将所有/特定工作表从 excel 转换为 csv

Windows 和 Linux 中二进制文件的 C 库校验和

python - Python中使用tempfile和subprocess将mysql转入mongodb

c - 在 C 中将字符转换为整数的问题

linux - Bash - 如何执行从不同脚本输出的脚本

linux -/tmp 在 Linux 中的用法

c - Windows目录是存放临时文件的地方 - GetTempPath函数