Запустил прогу под root: #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; }
в результате все время высвечивается exit_error(errno, "stat of device failed."); В чем дело не могу понять. Помогите пожалуста разобраться.