请注意,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
要获取这些区块信息,您可以使用statvfs。示例:
#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;
}
/tmp 分区在挂载时无法安全清理。您必须卸载它,这需要关闭该分区内引用 inode 的所有文件描述符。