Hi Remus!
On Tue, 25 Mar 2003, Remus Anca wrote:
> cum pot citi numarul serial al hardiscului, din C, dar sa apelez
> direct la hardisc, nu sa citesc din /proc sau cu alte utilitare ale
> linuxului.
Pai ... cum ar fi si logic ... trebuie sa fie un ioctl pentru
device-urile de tip ide care sa'ti dea aceasta informatie. Cel
mai simplu ar fi sa te uiti in sursele lui hdparm.
Iata si un exemplu ... :
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <linux/hdreg.h>
int get_serial(const char *device_fname, char *serial, int max_length)
{
int result;
int fd; int err;
struct hd_driveid hd_id;
int saved_errno;
int s_len;
fd = -1;
do {
result = -1;
if(device_fname == NULL || serial == NULL) break;
result = -2;
fd = open(device_fname, O_RDONLY, 0644);
if(fd < 0) break;
result = -3;
err = ioctl(fd, HDIO_GET_IDENTITY, &hd_id);
saved_errno = errno;
if(err != 0) break;
result = -4;
if(saved_errno == -ENOMSG) break;
s_len = max_length <= 20 ? max_length - 1 : 20;
memcpy(serial, hd_id.serial_no, s_len);
serial[s_len] = '\0';
result = 0;
} while (0);
if(fd >= 0) close(fd);
return result;
}
int main(int argc, char **argv)
{
char hd_serial[100];
if(get_serial("/dev/hda", hd_serial, 100) == 0) {
fprintf(stdout, "Serial number for /dev/hda is : `%s'\n", hd_serial);
} else {
fprintf(stderr, "Error: Cannot obtain the serial number for /dev/hda\n");
}
return 0;
}
Dar e clar ca trebuie sa fii root ... :)
>
> thx.
Cu placere.
Bogdan Marinca
>
>
> --
> Pentru dezabonare, trimiteti mail la
> [EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'.
> REGULI, arhive si alte informatii: http://www.lug.ro/mlist/
>
>
--
Pentru dezabonare, trimiteti mail la
[EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'.
REGULI, arhive si alte informatii: http://www.lug.ro/mlist/