/*************************文件控制块域************************************/
/**************************************************************************
在dos2.0以前的版本中,文件的I/O操作通过使用文件控制块(FCBs)完成。
当用户运行一个程序时,dos系统在系统中创建两个文件控制块。
dos在用户运行程序时分析命令行,并假定开头的两个命令行参数包含文件名。
dos将文件名赋给psp文件控制块。下述程序显示了赋给psp文件控制块的文件名。
**************************************************************************/
#include<dos.h>
#include<stdlib.h>
int main(void)
{
int i;
struct fcbs{
char drive;
char filename[8];
char extension[3];
int current_block;
int record_size;
};
typedef struct fcbs fcb;
struct program_segment_prefix{
char near *int20;
char near *next_paragraph_segment;
char reserved_1;
char dos_dispatcher[5];
char far *erminate_vector;
char far *ctrlc_vector;
char far *critical_error_vector;
char reserved_2[22];
char near *environment_block_segment;
char reserved_3[46];
fcb fcb1;
fcb fcb2;
char reserved_4[4];
char command_tail[128];
}far *psp;
psp=(struct program_segment_prefix far *)((long)_psp<<16);
if(psp->fcb1.filename[0]!=' ')
{
printf("First filename");
for(i=0;i<8;i++)
{
if(psp->fcb1.filename!=' ')
printf("%c",psp->fcb1.filename);
else
break;
}
printf(".");
for(i=0;i<3;i++)
{
if(psp->fcb1.extension!=' ')
printf("%c",psp->fcb1.extension);
else
break;
}
printf("\n");
}
if(psp->fcb2.filename[0]!=' ')
{
printf("Second filename");
for(i=0;i<8;i++)
{
if(psp->fcb2.filename!=' ')
printf("%c",psp->fcb2.filename);
else
break;
}
printf(".");
for(i=0;i<3;i++)
{
if(psp->fcb2.extension!=' ')
printf("%c",psp->fcb2.extension);
else
break;
}
}
getch();
return 0;
}