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/


Raspunde prin e-mail lui