質問

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

私はしようとしていた stat, 、しかし、それは約データを返します /dev ファイルシステム私が尋ねるならば /dev/sdb2.

システムコールで不可能な場合は、動的ファイルのどこを調べる必要がありますか(それも見つけることができませんでした。)

役に立ちましたか?

解決

あなたが使いたい 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);

他のヒント

ioctlの値は、unsigned longではなくsize_tである必要があると思います(最新のものはメモリに関連しています)。また、0に初期化します(BLKSSZGETが代わりにunsigned intを返す場合に備えて)。 ジェネラコディセタグプレ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top