如何用C管理linux tmp空间

时间:2012-05-07 15:42:19

标签: c linux

我对使用带有C函数的tmp linux

有一些疑问
  • 如何用C获取tmp的可用空间大小(当tmp不是tmpfs分区时)?

  • 如果使用C语言,如何以安全的方式清理tmp内存?

注意:

  • “df -h”没有显示tmp文件夹,所以tmp没有分区

  • proc / meminfo包含内存信息。如果我们将文件复制到tmp文件夹,我们会注意到/ proc / meminfo中MemFree变量的减少与复制文件的大小

3 个答案:

答案 0 :(得分:1)

通常,/tmp是对本地分区上的文件系统的安装。它通常是/var/tmp的链接。

有关详细信息,请参阅here

它的内容可能随时被删除。至少在系统启动时清理它是常见的行为。


tmpfs通常是驻留在SHM(共享内存)中的文件系统,类似于RAM磁盘。

我可以引用wikipedia

  

tmpfs是许多临时文件存储设施的通用名称   类Unix操作系统。它旨在显示为已安装   文件系统,但存储在易失性存储器而不是持久性存储器中   储存设备。类似的结构是RAM磁盘,显示为   虚拟磁盘驱动器并托管磁盘文件系统。

答案 1 :(得分:0)

我认为Linux发行版中有两种类型的/ tmp,它只是一个文件夹或tmpfs分区(来自RAM的磁盘)。

答案 2 :(得分:0)

请注意,ramfs / tmpfs分区会动态增长,并且您的程序负责不写入超过物理RAM数量的数据。

如果df没有显示挂载为/tmp的分区,则/(根分区)包含它,其大小是您{{1}的最大大小可能会占用。

现在让我们假设你有/tmp挂载为:

tmpfs

您可以使用# mount -t tmpfs -o size=100m tmpfs /mnt/tmp 检查其尺寸:

df

要获取这些阻止信息,您可以使用statvfs。例如:

# df -k
Filesystem      1K-blocks  Used     Available Use%  Mounted on
tmpfs           102400     0        102400    0%    /mnt/tmp

安装#include <stdio.h> #include <stdlib.h> #include <sys/statvfs.h> int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "Usage: %s <device>\n", argv[0]); return EXIT_FAILURE; } struct statvfs fsdata; int result = statvfs(argv[1], &fsdata); if (result != 0) { fprintf(stderr, "Failed to stat: %s\n", argv[1]); return EXIT_FAILURE; } printf("Disk %s:\n", argv[1]); printf(" file system block size: %lu\n", fsdata.f_bsize); printf(" fragment size: %lu\n", fsdata.f_frsize); printf(" size of fs in f_frsize units: %d\n", fsdata.f_blocks); printf(" # free blocks: %d\n", fsdata.f_bfree); printf(" # free blocks for unprivileged users: %d\n", fsdata.f_bavail); printf(" # inodes: %d\n", fsdata.f_files); printf(" # free inodes: %d\n", fsdata.f_ffree); printf(" # free inodes for unprivileged users: %d\n", fsdata.f_favail); printf(" file system ID: %lu\n", fsdata.f_fsid); printf(" mount flags: %lu\n", fsdata.f_flag); printf(" maximum filename length: %lu\n", fsdata.f_namemax); return EXIT_SUCCESS; } 分区时无法安全地清理。您必须卸载它,并且需要关闭此分区中引用inode 的所有文件描述符。