如何从/ dev / shm获取有关可用内存的信息

时间:2013-08-18 12:42:25

标签: c++ c boost boost-interprocess

我需要一种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不能抛出任何东西。

2 个答案:

答案 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()成功返回,则由于文件系统存储介质上缺少可用空间,对指定文件数据的后续写入不会失败。

这听起来像是您可能需要的功能。