dosh详解.docx

上传人:b****5 文档编号:12012890 上传时间:2023-04-16 格式:DOCX 页数:54 大小:29.76KB
下载 相关 举报
dosh详解.docx_第1页
第1页 / 共54页
dosh详解.docx_第2页
第2页 / 共54页
dosh详解.docx_第3页
第3页 / 共54页
dosh详解.docx_第4页
第4页 / 共54页
dosh详解.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

dosh详解.docx

《dosh详解.docx》由会员分享,可在线阅读,更多相关《dosh详解.docx(54页珍藏版)》请在冰豆网上搜索。

dosh详解.docx

dosh详解

Dos.h函数详解

@函数名称:

absread

函数原型:

intabsread(intdrive,intnsects,intsectnum,void*buffer)

函数功能:

对磁盘扇区读数据

函数返回:

0-操作成功,其他-操作失败

参数说明:

driver-读取的驱动器号0-表示驱动器A,以此类推

sectnum-读取的扇区号

nsects-读取的扇区数

所属文件:

#include

#include

#include

#include

intmain()

{

inti,strt,ch_out,sector;charbuf[512];

printf("InsertadisketteintodriveAandpressanykey");

getch();

sector=0;

if(absread(0,1,sector,&buf)!

=0)

{

perror("Diskproblem");

exit

(1);

}

printf("ReadOK");

strt=3;

for(i=0;i<80;i++)

{

ch_out=buf[strt+i];

putchar(ch_out);

}

printf("\n");

return(0);

}

@函数名称:

abswrite

函数原型:

intabswrite(intdrive,intnsects,intsectnum,void*buffer)

函数功能:

对磁盘扇区写数据

函数返回:

0-操作成功,其他-操作失败

参数说明:

driver-写入的驱动器号

sectnum-写入的扇区号

nsects-写入的扇区数

buf-写入内容

所属文件:

#include

#include

unsignedcharbuff[512];

/*此程企图将FAT区和ROOT区清空从而快速格式化磁盘*/

intmain()

{

inti;charc;

printf("QuickFormat1.44MB");

printf("ALLDATAINTHEFLOPPYDISKWILLBELOST!

!

");

printf("InsertadiskettefordriveA:

");

printf("andpressENTERwhenready...");c=getchar();

printf("CleaningFATarea...");

buff[0]=0xf0;buff[1]=buff[2]=0xff;

for(i=3;i<512;i++)buff=0;

abswrite(0,1,1,buff);

abswrite(0,1,10,buff);

for(i=0;i<512;i++)buff=0;

for(i=2;i<10;i++)abswrite(0,1,i,buff);

for(i=11;i<19;i++)abswrite(0,1,i,buff);

printf("CleaningROOTarea...");

for(i=19;i<33;i++)abswrite(0,1,i,buff);

printf("QuickFormatCompleted!

");

return0;

}

@函数名称:

allocmem

函数原型:

intallocmem(unsignedsize,unsigned*seg)

函数功能:

按节(16字节)分配内存块

函数返回:

-1:

分配成功,其他数值:

实际分配的节数

参数说明:

size-分配的节数,seg-分配后的段地址

所属文件:

#include

#include

#include

intmain()

{

unsignedintsize,segp;

intstat;

size=64;/*(64x16)=1024bytes*/

stat=allocmem(size,&segp);

if(stat==-1)

printf("Allocatedmemoryatsegment:

%x",segp);

else

printf("Failed:

maximumnumberofparagraphsavailableis%u",stat);

return0;

}

@函数名称:

bdos

函数原型:

intbdos(intfnum,unsigneddx,unsignedal)

函数功能:

执行DOS系统调用INT21H

函数返回:

寄存器AX的值

参数说明:

fnum-系统调用号,dx,al-赋给DX,AL寄存器的值

所属文件:

#include

#include

charcurrent_drive(void)

{

charcurdrive;

curdrive=bdos(0x19,0,0);

return('A'+curdrive);

}

intmain()

{

printf("Thecurrentdriveis%c:

",current_drive());

return0;

}

@函数名称:

country

函数原型:

structcountry*country(intcountrycode,structcountry*countryptr)

函数功能:

用于设置一些与国家相关的项目,如货币,时间日期的表示方式等

函数返回:

国家相关信息

参数说明:

结构定义:

structcountry{

intco_date;/*日期格式*/

charco_curr[5];/*货币符号*/

charco_thsep[2];/*数字分隔符*/

charco_desep[2];/*小数点*/

charco_dtsep[2];/*日期分隔符*/

charco_tmsep[2];/*时间分隔符*/

charco_currstyle;/*货币形式*/

charco_digits;/*有效数字*/

int(far*co_case)();/*事件处理函数*/

charco_dasep;/*数据分隔符*/

charco_fill[10];/*补充字符*/

}

所属文件:

#include

#include

#defineUSA0

intmain()

{

structCOUNTRYcountry_info;

country(USA,&country_info);

printf("ThecurrencysymbolfortheUSAis:

%s",country_info.co_curr);

return0;

}

@函数名称:

ctrlbrk

函数原型:

voidctrlbrk(int(*pfun)(vpod))

函数功能:

设置当Ctrl-Break组合键按下时,应执行的函数

函数返回:

参数说明:

pfun-要执行的函数指针,该函数应返回0值

所属文件:

#include

#include

#defineABORT0

intc_break()

{

printf("Control-Breakpressed.Programaborting...");

return(ABORT);

}

intmain()

{

ctrlbrk(c_break);

for(;;)

printf("Looping...Presstoquit:

");

return0;

}

@函数名称:

dosexterr

函数原型:

intdosexterr(structDOSERR*err)

函数功能:

得到DOS扩展调用失败时的错误信息

函数返回:

错误信息保存在err结构中

参数说明:

err-用于保存错误信息的结构指针

关于DOSextendederror代码(即:

structDOSERR.exterror)各系统差别极大,不一一列出

所属文件:

#include

#include

intmain()

{

FILE*fp;

structDOSERRORinfo;

fp=fopen("perror.dat","r");

if(!

fp)perror("Unabletoopenfileforreading");

dosexterr(&info);

printf("ExtendedDOSerrorinformation:

\n");

printf("Extendederror:

%d\t",info.exterror);

printf("Class:

%x\n",info.class);

printf("Action:

%x\t",info.action);

printf("ErrorLocus:

%x\n",info.locus);

return0;

}

@函数名称:

getcbrk

函数原型:

intgetcbrk(void)

函数功能:

检测对Ctrl-Break按下的检测是否允许

函数返回:

0-允许检测,1-不允许检测

参数说明:

所属文件:

#include

#include

intmain()

{

if(getcbrk())

printf("Cntrl-brkflagison");

else

printf("Cntrl-brkflagisoff");

return0;

}

@函数名称:

getdate

函数原型:

voidgetdate(structdate*d)

函数功能:

得到系统日期

函数返回:

参数说明:

d存放得到的日期信息

所属文件:

#include

#include

intmain()

{

structdated;

getdate(&d);

printf("Thecurrentyearis:

%d",d.da_year);

printf("Thecurrentdayis:

%d",d.da_day);

printf("Thecurrentmonthis:

%d",d.da_mon);

return0;

}

@函数名称:

setdate

函数原型:

voidsetdate(structdate*datep)

函数功能:

设置DOS日期

函数返回:

参数说明:

datep-要设置的日期数值,structdate定义格式如下:

structdate{

intda_year;

charda_day;

charda_mon;

};

所属文件:

#include

#include

#include

intmain()

{

structdatereset;

structdatesave_date;

getdate(&save_date);

printf("Originaldate:

");

system("date");

reset.da_year=2001;

reset.da_day=1;

reset.da_mon=1;

setdate(&reset);

printf("Dateaftersetting:

");

system("date");

setdate(&save_date);

printf("Backtooriginaldate:

");

system("date");

return0;

}

@函数名称:

settime

函数原型:

voidsettime(structtime*timep)

函数功能:

设置DOS时间

函数返回:

参数说明:

timep-要设置的时间数值,structtime定义格式如下:

structtime{

unsignedcharti_min;

unsignedcharti_hour;

unsignedcharti_hund;

unsignedcharti_sec;

};

所属文件:

#include

#include

intmain()

{

structtimet;

gettime(&t);

printf("Thecurrentminuteis:

%d",t.ti_min);

printf("Thecurrenthouris:

%d",t.ti_hour);

printf("Thecurrenthundredthofasecondis:

%d",t.ti_hund);

printf("Thecurrentsecondis:

%d",t.ti_sec);

t.ti_min++;

settime(&t);

return0;

}

@函数名称:

gettime

函数原型:

voidgettime(structdate*t)

函数功能:

得到系统时间

函数返回:

参数说明:

d存放得到的日期信息

所属文件:

#include

#include

intmain()

{

structtimet;

gettime(&t);

printf("Thecurrenttimeis:

%2d:

%02d:

%02d.%02d",t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);

return0;

}

@函数名称:

getdfree

函数原型:

voidgetdfree(intdrive,structdfree*dfptr)

函数功能:

得到驱动器的剩余磁盘空间

函数返回:

以结构返回:

structdfree{

unsigneddf_avail;/*可用簇数*/

unsigneddf_total;/*总簇数*/

unsigneddf_bsec;/*每扇区字节数*/

unsigneddf_sclus;/*每簇扇区数*/

}

参数说明:

drive-驱动器号:

1-A盘,2-B盘……

所属文件:

#include

#include

#include

#include

intmain()

{

structdfreefree;

longavail;

intdrive;

drive=getdisk();

getdfree(drive+1,&free);

if(free.df_sclus==0xFFFF)

{

printf("Erroringetdfree()call\n");

exit

(1);

}

avail=(long)free.df_avail*(long)free.df_bsec*(long)free.df_sclus;

printf("Drive%c:

has%ldbytesavailable\n",'A'+drive,avail);

return0;

}

@函数名称:

setdta

函数原型:

voidsetdta(charfar*dta)

函数功能:

设置DTA(磁盘传送区)地址

函数返回:

 

参数说明:

dta-缓冲区地址指针

所属文件:

#include

#include

#include

#include

intmain()

{

charline[80],far*save_dta;

charbuffer[256]="SETDTAtest!

";

structfcbblk;

intresult;

/*getnewfilenamefromuser*/

printf("Enterafilenametocreate:

");

gets(line);

/*passthenewfilenametothedta*/

parsfnm(line,&blk,1);

printf("%d%s\n",blk.fcb_drive,blk.fcb_name);

/*requestDOSservicestocreatefile*/

if(bdosptr(0x16,&blk,0)==-1)

{

perror("Errorcreatingfile");

exit

(1);

}

/*saveolddtaandsetnewdta*/

save_dta=getdta();

setdta(buffer);

/*writenewrecords*/

blk.fcb_recsize=256;

blk.fcb_random=0L;

result=randbwr(&blk,1);

printf("result=%d\n",result);

if(!

result)

printf("WriteOK\n");

else

{

perror("Diskerror");

exit

(1);

}

/*requestDOSservicestoclosethefile*/

if(bdosptr(0x10,&blk,0)==-1)

{

perror("Errorclosingfile");

exit

(1);

}

/*resettheolddta*/

setdta(save_dta);

return0;

}

@函数名称:

getdta

函数原型:

charfar*getdta(void)

函数功能:

得到磁盘传送地址(DTA)的指针

函数返回:

磁盘传送地址(DTA)的指针

参数说明:

所属文件:

#include

#include

intmain()

{

charfar*dta;

dta=getdta();

printf("Thecurrentdisktransferaddressis:

%Fp",dta);

return0;

}

@函数名称:

getfat

函数原型:

voidgetfat(intdrive,structfatinfo*fptr)

函数功能:

得到磁盘驱动器的信息

函数返回:

参数说明:

drive-驱动器号:

1-A盘,2-B盘,以此类推.fptr-磁盘驱动器的信息

所属文件:

#include

#include

intmain()

{

structfatinfodiskinfo;

intflag=0;

printf("leaseinsertdiskindriveA");

getchar();

getfat(1,&diskinfo);

printf("DriveA:

is");

switch((unsignedchar)diskinfo.fi_fatid)

{

case0xFD:

printf("360Klowdensity");break;

case0xF9:

printf("1.2Meghighdensity");break;

default:

printf("unformatted");flag=1;

}

if(!

flag)

{

printf("sectorspercluster%5d",diskinfo.fi_sclus);

printf("numberofclusters%5d",diskinfo.fi_nclus);

printf("bytespersector%5d",diskinfo.fi_bysec);

}

return0;

}

@函数名称:

getfatd

函数原型:

voidgetfatd(structfatinfo*fptr)

函数功能:

得到缺省驱动磁盘驱动器的信息

函数返回:

参数说明:

fptr-磁盘驱动器的信息

所属文件:

#include

#include

intmain()

{

structfatinfodiskinfo;

intflag=0;

printf("leaseinsertdiskindriveA");

getchar();

getfat(1,&diskinfo);

printf("DriveA:

is");

switch((unsignedchar)diskinfo.fi_fatid)

{

case0xFD:

printf("360Klowdensity");break;

case0xF9:

printf("1.2Meghighdensity");break;

default:

printf("unformatted");flag=1;

}

if(!

flag)

{

printf("sectorspercluster%5d",diskinfo.fi_sclus);

printf("numberofclusters%5d",diskinfo.fi_nclus);

printf("bytespersector%5d",diskinfo.fi_bysec);

}

return0;

}

@函数名称:

getpsp

函数原型:

unsignedgetpsp(void)

函数功能:

得到程序段前缀PSP的段地址(dos3.0的产物)

函数返回:

PSP的段地址

参数说明:

所属文件:

include

#include

intmain()

{

staticcharcommand[128];

charfar*cp;

intlen,i;

printf("Theprogramsegmentprefixis:

%u\n",getpsp());

/*_pspispresettosegmentofthePSP

Commandlineislocatedatoffset

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1