1

我需要 C 或 C++ 中的一种方法来从/dev/shm. 请注意ARM,不幸的是,在我在 Linux 上的架构中,ipcs报告了错误的最大值。可用内存信息,但df -h正确地为我提供了当前可用内存tmpfs

问题是我试图通过 分配共享内存boost::interprocess::shared_memory_object::truncate,但是当内存不可用时,这个函数不会抛出。这个问题显然不在boost::interprocess,而是来自底层ftruncate(),当没有可用内存时(https://svn.boost.org/trac/boost/ticket/4374)不返回适当的错误,所以boost不能抛出任何东西。

4

2 回答 2

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    
于 2013-08-18T12:59:48.960 回答
2

posix_fallocate()将在文件系统中分配支持范围,或者如果空间不足 ( ENOSPC) 则失败。

#include <fcntl.h>

int posix_fallocate(int fd, off_t offset, off_t len);

posix_fallocate() 函数应确保在文件系统存储介质上分配从偏移量开始并持续 len 字节的常规文件数据所需的任何存储空间。如果 posix_fallocate() 返回成功,则后续对指定文件数据的写入不会因文件系统存储介质上的可用空间不足而失败。

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

于 2013-08-18T17:52:23.377 回答