1

から空きメモリを取得する方法が C または C++ で必要です/dev/shmARM残念ながら、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() 関数は、offset から始まり len バイト続く通常のファイル データに必要なすべてのストレージが、ファイル システム ストレージ メディアに割り当てられることを保証します。posix_fallocate() が正常に返された場合、指定されたファイル データへの後続の書き込みは、ファイル システムのストレージ メディアに空き領域がないために失敗することはありません。

これは、代わりに必要な機能のように思えます。

于 2013-08-18T17:52:23.377 に答える