使用mkstemp()创建的文件被删除?

mat*_*scp 6 c linux temporary-files

我有一个调用mkstemp()的程序,写了一些返回fd的东西,然后关闭fd.我希望文件保留,直到我自己删除它!使用rm命令等等.我的问题是:Linux会在关闭后删除此文件(fd)吗?

Kon*_*lph 5

Linux将在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);
Run Code Online (Sandbox Code Playgroud)

fclose关闭FILE*流,还关闭基础文件描述符,因此我们不需要显式调用close(fd)

必要的标题:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
Run Code Online (Sandbox Code Playgroud)