我对使用带有C函数的tmp linux
有一些疑问如何用C获取tmp的可用空间大小(当tmp不是tmpfs分区时)?
如果使用C语言,如何以安全的方式清理tmp内存?
注意:
“df -h”没有显示tmp文件夹,所以tmp没有分区
proc / meminfo包含内存信息。如果我们将文件复制到tmp文件夹,我们会注意到/ proc / meminfo中MemFree变量的减少与复制文件的大小
答案 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 的所有文件描述符。