编号:QA004753
建立日期: 2003年11月8日 最后修改日期:2003年11月8日
所属类别:
Q 佚名:
操作系统: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();
}
//========================================================
A回答:
在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。