1

ハードドライブから基本情報を取得して印刷したい。最も重要なことは、物理セクター サイズが正しいことです。

過去数時間、私はioctl欲しいものを手に入れるために戦ってきましたが、それを理解することはできません.

私はこれまで一度も使用ioctlしたことがなく、正確に何をしなければならないかについての簡単な説明を見つけることができないようです.

とにかく、私のコードは次のようになります

int main () {
    FILE *driveptr;
    int sectorsize;
    struct hd_driveid hd;

    driveptr=fopen("/dev/sda","r");

    if (ioctl(driveptr,HDIO_GET_IDENTITY, &hd)!=0) { 
        printf("Hard disk model: %s\n",hd.model); 
        printf("Serial number: %s\n",hd.serial_no); 
        printf("Sector size: %i\n",hd.sector_bytes);
        sectorsize=hd.sector_bytes;
    } else { 
        printf("Error fetching device data.\n");
    }
}

コンパイラでは、これらの警告がスローされ、コンパイルされますが、印刷時に文字列が空になります。

gcc -o test source.c
source.c: In function ‘main’:
source.c:67:9: warning: passing argument 1 of ‘ioctl’ makes integer from pointer without a cast [enabled by default]
/usr/include/x86_64-linux-gnu/sys/ioctl.h:42:12: note: expected ‘int’ but argument is of type ‘struct FILE *’

何がうまくいかないのか誰かが私に説明してくれることを願っています!

4

1 に答える 1