ioctl
Viktor Vasilev
viktor.vasilev at stud.tu-darmstadt.de
Sun May 13 15:30:37 UTC 2007
On Sunday 13 May 2007 16:57 Viktor Vasilev wrote:
> On Sunday 13 May 2007 15:59 Mohsen Pahlevanzadeh wrote:
> > Dear all,
> > I need to a code piece that it gets serial number of hdd.
> > Please help me....
>
> For an ATA disk you can use the IOCATAGPARM ioctl to get the information.
> See the attached C source for example. Be sure to have a look
> at /usr/src/sys/sys/ata.h for other relevant fields and sizes.
i'll inline the source since it didn't came through..
#include <stdio.h>
#include <fcntl.h>
#include <err.h>
#include <sys/types.h>
#include <sys/ata.h>
int main() {
struct ata_params ap;
int fd, i;
if((fd = open("/dev/ad0", O_RDONLY)) == -1) {
err(1, "error opening /dev/ad0");
}
if (ioctl (fd, IOCATAGPARM, &ap) == -1) {
err(1, "error executing ioctl");
}
printf("Model: ");
for(i = 0; i < 40 && ap.model[i] != '\0'; i++)
printf("%c", ap.model[i]);
putchar('\n');
printf("Revision: ");
for(i = 0; i < 8 && ap.revision[i] != '\0'; i++)
printf("%c", ap.revision[i]);
putchar('\n');
printf("Serial: ");
for(i = 0; i < 20 && ap.serial[i] != '\0'; i++)
printf("%c", ap.serial[i]);
putchar('\n');
return 0;
}
Cheers,
Vik
More information about the freebsd-hackers
mailing list