91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 195KB
    文件類型: .gz
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-01
  • 語言: C/C++
  • 標簽:

資源簡介

自己學習C語言時寫的一個小有規模的程序,請大家看看,提提意見。

資源截圖

代碼片段和文件信息

#define??STRING_CHAR
#define??STRING_TO_NUM
#include?“dpt.h“
#include?“partition.h“
#include?“para.h“
#include?“error.h“
#include?“sector-rw.h“
extern?char?*argp[];
extern?char?*devname;
extern?pts??*pt_save;
/*
?*change?boot?partition?to?the?specified?partition.
?*if?it?is?successful?return?0;
?*if?there?is?no?mathched?partition?return?-ENOMATCHPAR.
?*if?failedreturn?a?negative?number?for?error?.
?*/
int?do_change_boot(char?*devnameunsigned?char?partition_num)
{
??int?iretfound=0;
??char?*diskbuf;
??unsigned?long?secrel_sec;
??pt?pt1[PT_HOLES];
??ret=get_pt(devname);
??if(ret<0)?return?ret;
??/*檢查分區號碼是否有效,啟動分區只能是1-4.?*/
??if(partition_num>?PT_HOLES?||?partition_num? printf(“?the?partition?number?is?invalid.\n“)?;
printf(“?the?valid?number?is?from?1?to?4?.\n“);
return?0;
??}
??/*如果要改變的分區已經是啟動分區,返回。*/
??if((pt_save+partition_num)->partition.active==0x80)?
return?0;
??diskbuf=malloc(BLKSIZE);
??if(diskbuf==NULL)?return?-ENOMEM;
??/*保存在分區表里的rel_sec此為判斷的依據。?*/
??rel_sec=(pt_save+partition_num)->partition.rel_sec;
??sec=MBR_SECTOR;/*?所在扇區只能是MBR即第0扇區。*/
??ret=read_sec_to_buff(devnamesec1diskbuf);
??if(ret?<=?0)?{
free(diskbuf);
return?ret;
??}
??for(i=0;i memcpy?(&pt1[i] \
(pt?*)&diskbuf[PARTITION_TABLE_START?+?i*sizeof(pt)] \
sizeof(pt));
/*兩者相等,我們才認為是同一分區且此分區扇區數必須大于零而且分區id不為空,否則不修改。*/
if(pt1[i].rel_sec==rel_sec?&&?pt1[i].nr_sec?>?0?&&?pt1[i].id?!=?0x00){
??found=1;???????????????
??diskbuf[PARTITION_TABLE_START?+?i*sizeof(pt)+offset(ptactive)]=0x80;?
}
/*其他的啟動分區改為非啟動分區,因為只能有一個啟動分區。*/
else?if(pt1[i].active==0x80)?{
??diskbuf[PARTITION_TABLE_START?+?i*sizeof(pt)+offset(ptactive)]=0x00;?
}
??}
??if(found)?{/*找到了,才真正進行修改,否則返回。*/
ret=write_buff_to_sec(diskbufBLKSIZEdevnamesec);
free(diskbuf);
return?ret;?
??}
??free(diskbuf);
??return?-ENOMATCHPAR;/*沒有找到匹配的分區,返回。?*/
}
/*
?*parse?the?parameters?or?get?the?partition?numberand?
?*then?call?the?function?to?do?the?real?work.
?*/
int?change_boot(?)
{
??int?t1ret;
??char?*pnum=argp[0];
??unsigned?char?par_num;
??t1=parse_para(pnum);
??if(t1==DEC)?{
par_num=strtoul(pnum&pnum10);
??}
??else?{
printf(“?Please?input?the?partition?number?you?want?to?boot?from?:\n“);
printf(“?The?valid?number?is?from?1?to?4.\n“);
par_num=get_dec_num(?);
??}
??ret=do_change_boot(devnamepar_num);
??if(ret<0)?{
printf(“Failed?to?change?partition?%d?to?boot?partition?!?\n“par_num);
return?ret;
??}
??printf(“?The?partition?%d?has?changed?to?boot?partition?successfully.\n“par_num);
??return?ret;
}


評論

共有 條評論

相關資源