如何用C管理linux tmp空间
我有一些关于使用带有C函数的tmp linux的问题如何用C管理linux tmp空间,c,linux,C,Linux,我有一些关于使用带有C函数的tmp linux的问题 如何使用C获得tmp的可用空间大小(当tmp不是tmpfs分区时) 当tmp内存充满C时,如何安全地清理它 注: “df-h”没有显示tmp文件夹,因此没有用于tmp的分区 proc/meminfo包含内存信息。如果我们将一个文件复制到tmp文件夹中,我们会注意到/proc/meminfo中MemFree变量随着复制文件的大小而减小 我认为Linux发行版中有两种类型的/tmp,它只是多了一个文件夹或tmpfs分区(RAM中的磁盘)。通
- 如何使用C获得tmp的可用空间大小(当tmp不是tmpfs分区时)
- 当tmp内存充满C时,如何安全地清理它
- “df-h”没有显示tmp文件夹,因此没有用于tmp的分区
- proc/meminfo包含内存信息。如果我们将一个文件复制到tmp文件夹中,我们会注意到/proc/meminfo中MemFree变量随着复制文件的大小而减小
/tmp
是在本地分区上装载到文件系统。它通常是指向/var/tmp
的链接
详情请参阅
它的内容可能随时被删除。至少在系统引导时清理它是常见的行为
tmpfs
通常是驻留在SHM(共享内存)中的文件系统,类似于RAM磁盘
我可以引述:
tmpfs是许多计算机上临时文件存储设施的通用名称
类似Unix的操作系统。其目的是显示为已安装的
文件系统,但存储在易失性内存中,而不是持久性内存中
存储设备。类似的结构是RAM磁盘,它显示为
虚拟磁盘驱动器并承载磁盘文件系统
请注意,ramfs/tmpfs分区是动态增长的,您的程序负责写入的数据不超过物理RAM的数量 如果
df
没有显示作为/tmp
装入的分区,则/
(根分区)包含该分区,其大小是您的/tmp
可能占用的最大大小
现在,假设您有一个tmpfs
挂载为:
# mount -t tmpfs -o size=100m tmpfs /mnt/tmp
您可以使用df
检查其大小:
# 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;
}
#包括
#包括
#包括
int main(int argc,字符**argv){
如果(argc!=2){
fprintf(stderr,“用法:%s\n”,argv[0]);
返回退出失败;
}
结构statvfs fsdata;
int result=statvfs(argv[1],&fsdata);
如果(结果!=0){
fprintf(stderr,“未能统计:%s\n”,argv[1]);
返回退出失败;
}
printf(“磁盘%s:\n”,argv[1]);
printf(“文件系统块大小:%lu\n”,fsdata.f\bsize);
printf(“片段大小:%lu\n”,fsdata.f\u frsize);
printf(“以f_fr大小单位表示的fs大小:%d\n”,fsdata.f_块);
printf(“#空闲块:%d\n”,fsdata.f#bfree);
printf(“#非特权用户的空闲块:%d\n”,fsdata.f#u bavail);
printf(“索引节点:%d\n”,fsdata.f\u文件);
printf(“#空闲索引节点:%d\n”,fsdata.f#ffree);
printf(“非特权用户的免费索引节点:%d\n”,fsdata.f#u favail);
printf(“文件系统ID:%lu\n”,fsdata.f\u fsid);
printf(“装载标志:%lu\n”,fsdata.f\u标志);
printf(“最大文件名长度:%lu\n”,fsdata.f\u namemax);
返回退出成功;
}
在装入
/tmp
分区时,您无法安全地清理该分区。您必须卸载它,这需要关闭该分区中引用inode的所有文件描述符。您的意思是为/tmp
或程序内存清空硬盘空间吗?/tmp是linux中的一个目录,但不是硬盘分区,这是一个内存分配如果我找不到/tmp文件夹的分区,可能会发生什么。它是直接内存分配(RAM)吗?或者它属于/partition寻找一个快速简单的答案,而不需要在这两种情况下详细说明,它们不是硬盘分区Ithink@MohamedKALLEL它可能是一个物理磁盘分区,因为您可以使用/tmp
作为其安装点来安装分区。tmpfs
通常是驻留在SHM(共享内存)中的文件系统,类似于RAM-disk。刚刚找到另一个可能让您感兴趣的答案:“df-h”中没有tmp分区,每次我向tmp文件夹中添加文件时,可用内存都会减少。对不起,我更新了我的答案来解决这个问题。/tmp不属于/。我将一个文件复制到/tmp文件夹,/proc/meminfo中的/size并没有减少,但空闲内存却减少了。您不应该指望我们知道您正在使用的文件系统,也不知道您的系统是如何配置的。您必须在问题中包含相关细节,以便我们能够正确回答。如果你不知道如何发现你的/tmp
来自何方,我建议你在提问时提出一个问题。