2011-12-07 13 views
5

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

私はstatで試していましたが、/dev/sdb2について質問すれば、/devというファイルシステムに関するデータを返します。

それは私が動的なファイルになりますシステムコール、(どちらかそれを見つけることができませんでした。)

答えて

9

では不可能だ場合は、BLKSSZGET特に、ioctlを使用したいです。

の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); 
+0

働くように思われます。 –

+0

オハイオ州は、何故私はゼロになっていますか? – Tebe

+1

@shbk - blockSizeがゼロかrcですか?どちらもゼロであることは驚くべきことです。 – themel

0

を私は希望、ioctl値はむしろ(最新は、より多くのメモリ関連のある)size_tよりunsigned longされるべきだと思います0に初期化してください(ちょうどBLKSSZGETunsigned intを返します)。

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

int fd = open("/dev/sda"); 
unsigned long blockSize = 0; 
int rc = ioctl(fd, BLKSSZGET, &blockSize); 
+0

彼らは 'fs.h'のsize_tです。' #define BLKBSZGET _IOR(0x12,112、size_t) 'と' #define BLKBSZSET _IOW(0x12,113、size_t) 'です。 –

関連する問題