Linuxでマウントせずにデバイス情報をブロックする
-
29-10-2019 - |
質問
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
を返す場合に備えて)。
ジェネラコディセタグプレ
所属していません StackOverflow