분할을 삭제하는 쓰기 프로그램
분할을 삭제하는 프로그램은 분쟁 해결 목적을 위해 사용된다. 예를 들면 당신은 당신의 디스크에 있는 FAT32 파일 시스템 분할이 있었다고, 추정하십시오. 지금 당신은 당신의 디스크에 있는 리눅스 운영 체계를 동시로 설치하는 것을 결정했다.
만약에 무엇이든을, 운영 체계의 임명이 중간에 중단되는 방법 MBR의 분할 테이블에 수정이 할 경우의, 단계에서. 그런 경우에는 당신이 다른 운영 체계를 설치하기 위하여 가고 있던, 분할이 접근하기 어렵게 된ㄴ다는 것을 많은 가능성이 있다.
이 경우에는 분실된 분할의 디스크 공간은 접근하기 어려운 때문에 무용하게 된다. , 우리가 다시 이 공간을 DOS의 FDISK 명령을 사용하여 쓸모 있는 해 좋은 방법 그러나 우리가 분할 테이블에서 저 분할의 분할 정보를 무엇이든 삭제하는 경우에.
MBR의 분할 테이블에서 분할 입장을 삭제하는 프로그램은 다음 주어졌다:
/* MBR의 분할 테이블에서 두번째 분할 입장을 삭제하는 프로그램 */
# include <bios.h>
/* 분할 테이블에서 분할 입장을 읽는 구조 */
struct partition
{
/* Active Partition Byte */
unsigned char bootable ;
/* Starting Head */
unsigned char start_side ;
/* 분야와 실린더 수 시작의 조합 */
unsigned int start_sec_cyl ;
/* File system Indicator Byte */
unsigned char parttype ;
/* Ending Head */
unsigned char end_side ;
/* 분야와 실린더 수 시작의 조합 */
unsigned int end_sec_cyl ;
/* 관계되는 분야 수 */
unsigned long part_beg ;
/* 분야에 있는 분할 길이 */
unsigned long plen ;
} ;
/* 읽기/쓰기 MBR에 구조 */
struct part
{
/* IPL (Initial Program Loader) */
unsigned char master_boot[446] ;
/* Partition table */
struct partition pt[4] ;
/* Magic Number */
int lasttwo ;
} ;
struct part p ;
void main()
{
unsigned int t1,t2;
clrscr();
biosdisk ( 2, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* display the information of
Partition table */
getch();
p.pt[1].bootable = 0;
p.pt[1].start_side = 0 ;
p.pt[1].start_sec_cyl = 0 ;
p.pt[1].parttype = 0;
p.pt[1].end_side = 0;
p.pt[1].end_sec_cyl = 0;
p.pt[1].part_beg = 0;
p.pt[1].plen = 0;
printf("\n\n\n After Deleting the Second Partition
Entry From MBR Partition Table,");
printf("\n The Partition Table will Be Changed as
Follows: ");
/* 두번째 분할 정보를 분할에서 삭제하기 위하여
MBR의 테이블은에서 앞으로 내리침을 제거한다
biosdisk () 기능. , 분할 부주의하게 사용하지 말라
분할 테이블의 두번째 분할의 정보는
be Erased Completely. */
////// biosdisk ( 3, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* 분할의 정보를 표시하십시오
수정 후에 테이블 */
getch();
}
프로그램에 대하여 코멘트:
Uncomment MBR의 분할 테이블에서 두번째 분할을 삭제하는 biosdisk (3, 0x80, 0, 0, 1, 1 의 &p) 기능.
분할을, 그것의 모든 매개변수는 MBR에 있는 분할 테이블 입장에서 0에 삭제하기 위하여는, 놓인다. 당신이 장시간 분할을 삭제하는 경우에 항상 저것을, 저 장시간 분할의 모든 논리적인 분할 또한 될 것이다 접근하기 어렵게 기억하십시오.
기능 전시는 () MBR의 분할 테이블을 표시하기 위하여 이용된다. 기능의 코딩은 다음과 같이 이다:
/* MBR의 분할 테이블을 표시하는 기능 */
display()
{
unsigned int s_sec, s_trk, e_sec, e_trk, i, t1, t2 ;
char type[20], boot[5] ;
printf("\n\nPart. Boot Starting location Ending Location
Relative Number of");
printf("\nType Side Cylinder Sector Side Cylinder
Sector Sectors Sectors\n");
for ( i = 0 ; i <= 3 ; i++ )
{
if ( p.pt[i].bootable == 0x80 )
strcpy ( boot, "Yes" ) ;
else
strcpy ( boot, "No" ) ;
switch ( p.pt[i].parttype )
{
case 0x00 :
strcpy ( type, "Unused" ) ; break ;
case 0x1 :
strcpy ( type, "FAT12" ) ; break ;
case 0x2 :
strcpy ( type, "Xenix" ) ; break ;
case 0x3 :
strcpy ( type, "Xenix:usr" ) ; break ;
case 0x4 :
strcpy ( type, "FAT16<32M" ) ; break ;
case 0x5 :
strcpy ( type, "DOS-Ext." ) ; break ;
case 0x6 :
strcpy ( type, "FAT16>32M" ) ; break ;
case 0x7 :
strcpy ( type, "NTFS" ) ; break ;
case 0x0b :
strcpy ( type, "FAT32" ) ; break ;
case 0x0c :
strcpy ( type, "FAT32-LBA" ) ; break ;
case 0x0d :
strcpy ( type, "VFAT16" ) ; break ;
case 0x0e :
strcpy ( type, "VFAT16-LBA" ) ; break ;
case 0x0f :
strcpy ( type, "FAT EXT" ) ; break ;
case 0x17 :
strcpy ( type, "HPFS" ) ; break ;
case 0x81 :
strcpy ( type, "Old LINUX" ) ; break ;
case 0x82 :
strcpy ( type, "LinuxSwap" ) ; break ;
case 0x83 :
strcpy ( type, "LinuxNative" ) ; break ;
case 0x85 :
strcpy ( type, "Linux Ext." ) ; break ;
default :
strcpy ( type, "Unknown" ) ; break ;
}
s_sec = ( p.pt[i].start_sec_cyl & 0x3f ) ;
t1 = ( p.pt[i].start_sec_cyl & 0xff00 ) >> 8 ;
t2 = ( p.pt[i].start_sec_cyl & 0x00c0 ) << 2 ;
s_trk = t1 | t2 ;
e_sec = ( p.pt[i].end_sec_cyl & 0x3f ) ;
t1 = ( p.pt[i].end_sec_cyl & 0xff00 ) >> 8 ;
t2 = ( p.pt[i].end_sec_cyl & 0x00c0 ) << 2 ;
e_trk = t1 | t2 ;
printf ( "\n%6s %3s", type, boot ) ;
printf ( "%4d %6d %8d", p.pt[i].start_side,
s_trk,s_sec ) ;
printf ( "%7d %6u %8u", p.pt[i].end_side, e_trk,
e_sec ) ;
printf ( " %10lu %10lu", p.pt[i].part_beg,
p.pt[i].plen ) ;
}
return 0;
}
|
page 1 | 2 | 3 | 4 | 5 | 6 |
|
|
|