该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在底层系统中用的多。linux开源的资源也基本是用c写的,c需要掌握面向对象和指针的精髓,
UINT8 DiskAddDriver(LPDISKDRIVER lpDiskDriver, PDEVINFO pDev)
{
UINT8 Drive;
UINT8 i;
PDISKINFO pt;
if (lpDiskDriver == NULL || pDev == NULL) return DISK_PAR_INVALID;
if (lpDiskDriver(pDev, DISK_MOUNT, NULL, 0) == DISK_MOUNT_ERR) return DISK_DRIVER_ERR;
pt = pHead;
Drive = 'A';
while (pt != NULL){
Drive ++;
pt = pt->pNext;
}
lpDiskDriver(pDev, DISK_READ_SECTOR, (PUINT8)&MBRBuf, 0);
if (((MBRBuf.BootCode[0] == 0xEB) && (MBRBuf.BootCode[2] == 0x90)) || (MBRBuf.BootCode[0] == 0xE9)){
if ((pt = DiskInfoAlloc()) == NULL){
return DISK_NO_FREE_INFO;
}
pt->lpDiskDriver = lpDiskDriver;
pt->SecOffset = 0;
pt->pDev = pDev;
DiskInfoAdd(pt);
}else if (MBRBuf.BootCode[0] == 0x33 && MBRBuf.BootCode[1] == 0xC0 && MBRBuf.BootCode[2] == 0x81){
for (i = 0; i
if (MBRBuf.PartTable[i].SystemID == PART_TYPE_WIN95_EXTEND || MBRBuf.PartTable[i].SystemID == PART_TYPE_EXTEND){
DiskGetExPartInfo(lpDiskDriver, pDev, MBRBuf.PartTable[i].RelSecIndex);
}else if (MBRBuf.PartTable[i].SystemID == PART_TYPE_NULL){
break;
}else{
if ((pt = DiskInfoAlloc()) == NULL){
break;
}
pt->lpDiskDriver = lpDiskDriver;
pt->SecOffset = MBRBuf.PartTable[i].RelSecIndex;
pt->pDev = pDev;
DiskInfoAdd(pt);
}
}
}else{
return DISK_BOOTCODE_ERR;
}
return Drive;
}
写出以上风格的程序就基本是精通了,但c语言只是实现的编程技能,还需要其它相关的知识才有�