我需要一种C或C ++方式来获取/dev/shm
提供的可用内存。请注意,在Linux上的ARM
架构上,遗憾的是,ipcs
报告错误的最大值。可用内存信息,但df -h
正确地为我提供了tmpfs
的当前可用内存。
问题是我试图通过boost::interprocess::shared_memory_object::truncate
分配共享内存,但是当内存不可用时,此函数不会抛出。此问题显然不在boost::interprocess
中,而是来自基础ftruncate()
,当没有可用内存(https://svn.boost.org/trac/boost/ticket/4374)时,它不会返回相应的错误,因此boost
不能抛出任何东西。
答案 0 :(得分:3)
尝试使用statvfs glibc函数或statfs系统调用
#include <sys/statvfs.h>
int statvfs(const char *path, struct statvfs *buf);
#include <sys/vfs.h> /* or <sys/statfs.h> */
int statfs(const char *path, struct statfs *buf);
// in both structures you can get the free memory
// by the following formula.
free_Bytes = s->f_bsize * s->f_bfree
答案 1 :(得分:2)
posix_fallocate()
将在文件系统中分配支持范围,如果空间不足(ENOSPC
)则会失败。
#include <fcntl.h>
int posix_fallocate(int fd, off_t offset, off_t len);
posix_fallocate()函数应确保在文件系统存储介质上分配从offset开始并继续len字节的常规文件数据所需的任何存储。如果posix_fallocate()成功返回,则由于文件系统存储介质上缺少可用空间,对指定文件数据的后续写入不会失败。
这听起来像是您可能需要的功能。