LINUX.ORG.RU

Определение серийного номера HDD


0

0

Запустил прогу:

#include <stdio.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <linux/major.h> #include <linux/hdreg.h>

static struct hd_driveid id;

void exit_error(int err, char *msg) { fprintf(stderr, "%s\n", msg); exit(1); }

void check_drive_type(char *device) { struct stat stat_buf;

if(stat(device, &stat_buf)) exit_error(errno, "stat of device failed.");

#ifdef SCSI_DISK0_MAJOR if((major(stat_buf.st_rdev) == SCSI_DISK0_MAJOR) || (major(stat_buf.st_rdev) == SCSI_DISK1_MAJOR) || (major(stat_buf.st_rdev) == SCSI_DISK2_MAJOR) || (major(stat_buf.st_rdev) == SCSI_DISK3_MAJOR) || (major(stat_buf.st_rdev) == SCSI_DISK4_MAJOR) || (major(stat_buf.st_rdev) == SCSI_DISK5_MAJOR) || (major(stat_buf.st_rdev) == SCSI_DISK6_MAJOR) || (major(stat_buf.st_rdev) == SCSI_DISK7_MAJOR) #else if((major(stat_buf.st_rdev) == SCSI_DISK_MAJOR) #endif #ifdef MD_MAJOR || (major(stat_buf.st_rdev) == MD_MAJOR) #endif ) exit_error(1, "SCSI disk is not supported."); else #ifdef XT_DISK_MAJOR if(major(stat_buf.st_rdev) == XT_DISK_MAJOR) exit_error(1, "XT disk is not supported."); else #endif if(major(stat_buf.st_rdev) != IDE0_MAJOR && major(stat_buf.st_rdev) != IDE1_MAJOR #ifdef IDE2_MAJOR && major(stat_buf.st_rdev) != IDE2_MAJOR #endif #ifdef IDE3_MAJOR && major(stat_buf.st_rdev) != IDE3_MAJOR #endif #ifdef IDE4_MAJOR && major(stat_buf.st_rdev) != IDE4_MAJOR #endif #ifdef IDE5_MAJOR && major(stat_buf.st_rdev) != IDE5_MAJOR #endif ) exit_error(1, "This disk is not supported."); }

/* первый аргумент - файл устройства диска (напр. /dev/hda) */ int main(int argc, char *argv[]) { int fd;

check_drive_type(argv[1]);

if((fd = open(argv[1], O_RDONLY)) < 0) exit_error(errno, "Unable to open device.");

if(!ioctl(fd, HDIO_GET_IDENTITY, &id)) printf("Model = %s, Revision = %s, Serial Number = %s\n", id.model, id.fw_rev, id.serial_no); else if(errno == -ENOMSG) fprintf(stderr, "No identification info available.\n"); else fprintf(stderr, "HDIO_GET_IDENTITY failed.\n");

return 0; }

в результате все время высвечивается "stat of device failed." В чем дело не могу понять. Помогите пожалуста разобраться.

anonymous

тебе мож в development с этим надо ? или тебе просто тулза для определения s/n нужна ? если последнее - возьми smartmontools , smartctl тебе и device model, и s/n покажет . если первое - то хоть код посмотришь :) а , и в догонку - ты прогу-то свою рутом пускаешь ? может ей банально прав не хватает ?

sasha999 ★★★★
()
Ответ на: комментарий от sasha999

> если последнее - возьми smartmontools , smartctl тебе и device model, и s/n покажет

hdparm -I /dev/...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.