热情软件屋

 

在Linux下获取物理硬盘序列号


编号:QA004753
建立日期: 2003年11月8日 最后修改日期:2003年11月8日
所属类别:

佚名:
    操作系统:Redhat 7.2 Linux 内核2.4.18
    编程工具:gcc
    问题:我希望能在Redhat 7.2 Linux 内核2.4.18下获取物理硬盘序列号(不是逻辑盘)尝试了如下代码(用gcc编译通过),然而运行时,以失败告终:"Segment Fault"向你们请求帮助,十分感谢!
    //========================================================
    
#include <stdio.h>
    
#include <stdlib.h>
    
#include <unistd.h>
    
#include <string.h>
    
#define extern
    
#include <asm/io.h>
    
    
char *getascii (unsigned int in_data [], int off_start, int off_end);
    
    
static int WaitIde()
    
{
    
int al;
    
    
while ((al=inb(0x1F7))>=0x80) ;
    
return al;
    
}
    
    
static void ReadIDE()
    
{
    
int al;
    
int i;
    
WORD pw[256];
    
    
WaitIde();
    
outb(0xA0,0x1F6);
    
al = WaitIde();
    
if ((al&0x50)!=0x50) return;
    
    
outb(0xA0,0x1F6);
    
outb(0xEC,0x1F7);
    
al = WaitIde();
    
if ((al&0x58)!=0x58) return;
    
    
for (i=0;i<256;i++) {
    
pw[i] = inw(0x1F0);
    
}
    
}
    
    
int main (void)
    
{
    
ReadIDE();
    
}
    
//========================================================
    

回答:

    在ReadIDE的开始处加上
    ioperm(0x1f0, 16, 1);

此问题由cngb回答。

附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 磁盘、文件和目录, disk, file, fat, directory, folder

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio