5

Linux、C++ でブロック デバイスの情報 (具体的にはブロック サイズ) を取得しようとしています。デバイスをマウントせずに、おそらく動的ファイル (のような/sys) を調べることなく、システム コールのみでデバイスのブロック サイズを取得することは可能ですか?

で試していましたが、 について尋ねると、ファイルシステムstatに関するデータが返されます。/dev/dev/sdb2

システムコールで無理な場合、動的ファイルのどこを調べればよいでしょうか(見つけられませんでした)。

4

2 に答える 2

9

ioctl特にを使用したいBLKSSZGET

linux/fs.h の引用:

#define BLKSSZGET  _IO(0x12,104)/* get block device sector size */

テストされていない例:

#include <sys/ioctl.h>
#include <linux/fs.h>

int fd = open("/dev/sda");
size_t blockSize;
int rc = ioctl(fd, BLKSSZGET, &blockSize);
于 2011-12-07T13:53:35.390 に答える
0

ioctl値は(最新のものはよりメモリに関連しています)ではなく、0に初期化する必要があるunsigned longsize_t思います(代わりに返される場合にBLKSSZGET備えunsigned intて)。

#include <sys/ioctl.h>
#include <linux/fs.h>

int fd = open("/dev/sda");
unsigned long blockSize = 0;
int rc = ioctl(fd, BLKSSZGET, &blockSize);
于 2014-01-22T07:52:25.943 に答える