c - 在linux中创建非持久文件的最佳方法是什么

标签 c linux file-handling temp

在我的应用程序中,我创建了一个 C 进程,如果该进程终止,该进程将重新生成。现在我需要知道进程是否第一次生成(系统重新启动后),由于哪个函数 X 将被调用,或者进程是否在崩溃(运行时)后由于哪个函数 Y 而重新生成将被调用。

我尝试使用命令 mktemp() 创建临时文件,但即使在重新启动后,这些文件似乎仍然存在。

那么最好的方法是什么?

最佳答案

mktemp/tmp 中创建文件(默认情况下)。在许多发行版中,/tmp 是持久的(即磁盘支持,而不是内存支持)。

您正在寻找的是在内存支持的安装中创建文件。通常这些是 tmpfs 挂载。例如,在我的 Arch Linux 笔记本电脑上,我的 tmpfs 安装是:

$ mount | grep tmpfs
[..]
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime)

因此,在这个系统上,我可以在 /run 上打开并写入 /dev/shm/ 中的文件,它们将由我的内存支持,它们不会'不必跨 Boot 持续存在,访问将快速且便宜。

回到你的问题,看来你可以改变mktemp使用的目录。引用手册页:

-p DIR, --tmpdir[=DIR]
              interpret  TEMPLATE relative to DIR; if DIR is not specified, use $TMPDIR if set, else /tmp.  With this option, TEMPLATE must not be
              an absolute name; unlike with -t, TEMPLATE may contain slashes, but mktemp creates only the final component

编辑 - 还有一些事情:

  • 这完全依赖于发行版;其他发行版可能会在 /tmp 处挂载 tmpfs
  • 有趣的是,/dev/shm 是存储使用 shm_open 创建的共享内存对象的位置。

关于c - 在linux中创建非持久文件的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41981517/

相关文章:

python - Python 中的文件处理 : being used by another process

windows - 需要在 Windows 中使用 perl 删除所有空子目录

c - 想要从C中的结构体内存中访问结构体指针类型的数据

c++ - 在 win 7 64 位的 visual studio 2012 中编写 x86 汇编代码的问题

我可以在调用 X509_STORE_add_cert(X509_STORE *ctx, X509 *x) 后释放 X509 *x 吗?

c - 当文件系统已满时进程会发生什么

c++ - 如何在Linux上使用Ptrace打印C++其他进程的调用栈

c - 管理日志文件大小

c - 为什么要用这个宏?

python - 如何在一个文件的一行中输出 3 个项目?