linux 获取硬盘序列号
找了好久,找到下面代码:
// a.cpp
//在Linux下获取硬盘物理系列号的程序
#include
#include
#include
#include /* ioperm() */
#include /* outb(), inb() */
//#include //推荐不要使用这个asm/io.h
#define _DEBUG_ 1
/* get serial number */
int gethddsn(char *ide)
{
unsigned int ide_info[257];
unsigned int info_off;
unsigned long loop2 = 0;
int loop, loop1 = 0;
if( ioperm(0x1F6, 1, 1) ) {
perror("ioperm");
//exit(-1);
return 0;
}
outb(0xA0, 0x1F6);
if( ioperm(0x1F7, 1, 1) ) {
perror("ioperm");
//exit(-1);
return 0;
}
outb(0xEC, 0x1F7);
do {
if( ioperm(0x1F7, 1, 1) ) {
perror("ioperm");
//exit(-1);
return 0;
}
}while( inb(0x1F7) != 0x58 && loop2++
for( info_off = 0; info_off != 256; info_off++) {
if( ioperm(0x1F0, 2, 1) ) {
perror("ioperm");
//exit(-1);
return 0;
}
ide_info[info_off] = inw(0x1F0);
}
for(loop = 10, loop1 = 0; loop <= 19; loop++)
{
ide[loop1++] = (char)(ide_info[loop]/256);
ide[loop1++] = (char)(ide_info[loop]%256);
}
ide[loop1] = 0x00; //字符串结束
if( loop1 > 20 )
{
printf("*hdsn too len:[%d] error!*\n", loop1);
return 0;
}
return 1;
}
#if _DEBUG_
int main(void) //print hard disk number