dos.h详解.doc_第1页
dos.h详解.doc_第2页
dos.h详解.doc_第3页
dos.h详解.doc_第4页
dos.h详解.doc_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Dos.h函数详解函数名称: absread函数原型: int absread(int drive, int nsects, int sectnum, void *buffer)函数功能: 对磁盘扇区读数据函数返回: 0-操作成功,其他-操作失败参数说明: driver-读取的驱动器号 0-表示驱动器A,以此类推sectnum-读取的扇区号nsects-读取的扇区数所属文件: #include #include #include #include int main()int i,strt,ch_out,sector;char buf512;printf(Insert a diskette into drive A and press any key);getch();sector=0;if(absread(0,1,sector,&buf)!=0)perror(Disk problem);exit(1);printf(Read OK);strt=3;for (i=0;i80;i+)ch_out=bufstrt+i;putchar(ch_out);printf(n);return(0);函数名称: abswrite函数原型: int abswrite(int drive, int nsects, int sectnum, void *buffer)函数功能: 对磁盘扇区写数据函数返回: 0-操作成功,其他-操作失败参数说明: driver-写入的驱动器号sectnum-写入的扇区号nsects-写入的扇区数buf-写入内容所属文件: #include #include unsigned char buff512;/* 此程企图将FAT区和ROOT区清空从而快速格式化磁盘 */int main()int i;char c;printf(Quick Format 1.44MB);printf(ALL DATA IN THE FLOPPY DISK WILL BE LOST!);printf(Insert a diskette for drive A:);printf(and press ENTER when ready. . .);c=getchar();printf(Cleaning FAT area. . .);buff0=0xf0;buff1=buff2=0xff;for(i=3;i512;i+)buff=0;abswrite(0,1,1,buff);abswrite(0,1,10,buff);for(i=0;i512;i+)buff=0;for(i=2;i10;i+)abswrite(0,1,i,buff);for(i=11;i19;i+)abswrite(0,1,i,buff);printf(Cleaning ROOT area. . .);for(i=19;i33;i+)abswrite(0,1,i,buff);printf(QuickFormat Completed!);return 0;函数名称: allocmem函数原型: int allocmem(unsigned size, unsigned * seg)函数功能: 按节(16字节)分配内存块函数返回: -1:分配成功,其他数值:实际分配的节数参数说明: size-分配的节数,seg-分配后的段地址所属文件: #include #include #include int main()unsigned int size,segp;int stat;size=64; /* (64 x 16)=1024 bytes */stat=allocmem(size,&segp);if (stat=-1)printf(Allocated memory at segment: %x,segp);elseprintf(Failed: maximum number of paragraphs available is %u,stat);return 0;函数名称: bdos函数原型: int bdos(int fnum, unsigned dx, unsigned al)函数功能: 执行DOS系统调用INT 21H函数返回: 寄存器AX的值参数说明: fnum-系统调用号,dx,al-赋给DX,AL寄存器的值所属文件: #include #include char current_drive(void)char curdrive;curdrive=bdos(0x19,0,0);return(A+curdrive);int main()printf(The current drive is %c:,current_drive();return 0;函数名称: country函数原型: struct country *country(int countrycode, struct country *countryptr)函数功能: 用于设置一些与国家相关的项目,如货币,时间日期的表示方式等函数返回: 国家相关信息参数说明: 结构定义:struct countryint co_date; /*日期格式*/char co_curr5; /*货币符号*/char co_thsep2; /*数字分隔符*/char co_desep2; /*小数点*/char co_dtsep2; /*日期分隔符*/char co_tmsep2; /*时间分隔符*/char co_currstyle; /*货币形式*/char co_digits; /*有效数字*/int (far *co_case)(); /*事件处理函数*/char co_dasep; /*数据分隔符*/char co_fill10; /*补充字符*/所属文件: #include #include #define USA 0int main()struct COUNTRY country_info;country(USA,&country_info);printf(The currency symbol for the USA is: %s,country_info.co_curr);return 0;函数名称: ctrlbrk函数原型: void ctrlbrk(int (*pfun)(vpod)函数功能: 设置当Ctrl-Break组合键按下时,应执行的函数函数返回:参数说明: pfun-要执行的函数指针,该函数应返回0值所属文件: #include #include #define ABORT 0int c_break()printf(Control-Break pressed. Program aborting .);return (ABORT);int main()ctrlbrk(c_break);for(;)printf(Looping. Press to quit:);return 0;函数名称: dosexterr函数原型: int dosexterr(struct DOSERR *err)函数功能: 得到DOS扩展调用失败时的错误信息函数返回: 错误信息保存在err结构中参数说明: err-用于保存错误信息的结构指针关于DOS extended error代码(即:struct DOSERR.exterror)各系统差别极大,不一一列出所属文件: #include #include int main()FILE *fp;struct DOSERROR info;fp=fopen(perror.dat,r);if (!fp) perror(Unable to open file for reading);dosexterr(&info);printf(Extended DOS error information:n);printf(Extended error: %dt,info.exterror);printf(Class: %xn,info.class);printf(Action: %xt,info.action);printf(Error Locus: %xn,info.locus);return 0;函数名称: getcbrk函数原型: int getcbrk(void)函数功能: 检测对Ctrl-Break按下的检测是否允许函数返回: 0-允许检测,1-不允许检测参数说明:所属文件: #include #include int main()if (getcbrk()printf(Cntrl-brk flag is on);elseprintf(Cntrl-brk flag is off);return 0;函数名称: getdate函数原型: void getdate(struct date *d)函数功能: 得到系统日期函数返回:参数说明: d 存放得到的日期信息所属文件: #include #include int main()struct date d;getdate(&d);printf(The current year is: %d,d.da_year);printf(The current day is: %d,d.da_day);printf(The current month is: %d,d.da_mon);return 0;函数名称: setdate函数原型: void setdate(struct date *datep)函数功能: 设置DOS日期函数返回:参数说明: datep-要设置的日期数值,struct date定义格式如下:struct dateint da_year;char da_day;char da_mon;所属文件: #include #include #include int main()struct date reset;struct date save_date;getdate(&save_date);printf(Original date:);system(date);reset.da_year=2001;reset.da_day=1;reset.da_mon=1;setdate(&reset);printf(Date after setting:);system(date);setdate(&save_date);printf(Back to original date:);system(date);return 0;函数名称: settime函数原型: void settime(struct time *timep)函数功能: 设置DOS时间函数返回:参数说明: timep-要设置的时间数值,struct time定义格式如下:struct timeunsigned char ti_min;unsigned char ti_hour;unsigned char ti_hund;unsigned char ti_sec;所属文件: #include #include int main()struct time t;gettime(&t);printf(The current minute is: %d,t.ti_min);printf(The current hour is: %d,t.ti_hour);printf(The current hundredth of a second is: %d,t.ti_hund);printf(The current second is: %d,t.ti_sec);t.ti_min+;settime(&t);return 0;函数名称: gettime函数原型: void gettime(struct date *t)函数功能: 得到系统时间函数返回:参数说明: d 存放得到的日期信息所属文件: #include #include int main()struct time t;gettime(&t);printf(The current time is: %2d:%02d:%02d.%02d,t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);return 0;函数名称: getdfree函数原型: void getdfree(int drive, struct dfree *dfptr)函数功能: 得到驱动器的剩余磁盘空间函数返回: 以结构返回:struct dfreeunsigned df_avail; /* 可用簇数 */unsigned df_total; /* 总簇数 */unsigned df_bsec; /* 每扇区字节数 */unsigned df_sclus; /* 每簇扇区数 */参数说明: drive-驱动器号:1-A盘,2-B盘所属文件: #include #include #include #include int main()struct dfree free;long avail;int drive;drive=getdisk();getdfree(drive+1,&free);if(free.df_sclus=0xFFFF)printf(Error in getdfree() calln);exit(1);avail=(long)free.df_avail * (long)free.df_bsec * (long)free.df_sclus;printf(Drive %c: has %ld bytes availablen,A+drive,avail);return 0;函数名称: setdta函数原型: void setdta(char far *dta)函数功能: 设置DTA(磁盘传送区)地址函数返回:参数说明: dta-缓冲区地址指针所属文件: #include #include #include #include int main()char line80,far *save_dta;char buffer256=SETDTA test!;struct fcb blk;int result;/* get new file name from user */printf(Enter a file name to create:);gets(line);/* pass the new file name to the dta */parsfnm(line,&blk,1);printf(%d %sn,blk.fcb_drive,blk.fcb_name);/* request DOS services to create file */if(bdosptr(0x16,&blk,0)=-1)perror(Error creating file);exit(1);/* save old dta and set new dta */save_dta=getdta();setdta(buffer);/* write new records */blk.fcb_recsize=256;blk.fcb_random=0L;result=randbwr(&blk,1);printf(result=%dn,result);if (!result)printf(Write OKn);elseperror(Disk error);exit(1);/* request DOS services to close the file */if (bdosptr(0x10,&blk,0)=-1)perror(Error closing file);exit(1);/* reset the old dta */setdta(save_dta);return 0;函数名称: getdta函数原型: char far * getdta(void)函数功能: 得到磁盘传送地址(DTA)的指针函数返回: 磁盘传送地址(DTA)的指针参数说明:所属文件: #include #include int main()char far *dta;dta=getdta();printf(The current disk transfer address is: %Fp,dta);return 0;函数名称: getfat函数原型: void getfat(int drive, struct fatinfo *fptr)函数功能: 得到磁盘驱动器的信息函数返回:参数说明: drive-驱动器号:1-A盘,2-B盘,以此类推.fptr-磁盘驱动器的信息所属文件: #include #include int main()struct fatinfo diskinfo;int flag=0;printf(lease insert disk in drive A);getchar();getfat(1,&diskinfo);printf(Drive A: is );switch(unsigned char) diskinfo.fi_fatid)case 0xFD:printf(360K low density);break;case 0xF9:printf(1.2 Meg high density);break;default:printf(unformatted);flag=1;if(!flag)printf(sectors per cluster %5d,diskinfo.fi_sclus);printf(number of clusters %5d,diskinfo.fi_nclus);printf(bytes per sector %5d,diskinfo.fi_bysec);return 0;函数名称: getfatd函数原型: void getfatd(struct fatinfo *fptr)函数功能: 得到缺省驱动磁盘驱动器的信息函数返回:参数说明: fptr-磁盘驱动器的信息所属文件: #include #include int main()struct fatinfo diskinfo;int flag=0;printf(lease insert disk in drive A);getchar();getfat(1,&diskinfo);printf(Drive A: is );switch(unsigned char) diskinfo.fi_fatid)case 0xFD:printf(360K low density);break;case 0xF9:printf(1.2 Meg high density);break;default:printf(unformatted);flag=1;if(!flag)printf(sectors per cluster %5d,diskinfo.fi_sclus);printf(number of clusters %5d,diskinfo.fi_nclus);printf(bytes per sector %5d,diskinfo.fi_bysec);return 0;函数名称: getpsp函数原型: unsigned getpsp(void)函数功能: 得到程序段前缀PSP的段地址(dos3.0的产物)函数返回: PSP的段地址参数说明:所属文件: include #include int main()static char command128;char far *cp;int len,i;printf(The program segment prefix is: %un,getpsp();/* _psp is preset to segment of the PSPCommand line is located at offset 0x81 from start of PSP */cp=(char *)MK_FP(_psp, 0x80);len=*cp;for(i=0;ilen;i+)command=cpi+1;printf(Command line: %sn,command);return 0;函数名称: setverify函数原型: void setverify(int value)函数功能: 设置DOS磁盘操作中确认标志的状态函数返回:参数说明: value=0:磁盘操作无需确认,value=1:磁盘操作需要确认所属文件: #include #include #include #define INTR 0X1Cvoid interrupt(*oldhandler)();int count=0;void interrupt handler()count+;oldhandler();int main()oldhandler=getvect(INTR);setvect(INTR,handler);while (count20)printf(count is %d,count);setvect(INTR,oldhandler);return 0;函数名称: getverify函数原型: int getverify(void)函数功能: 得到DOS确认标志的状态函数返回: 0-标识为off,1-标识为on参数说明:所属文件: #include #include int main()if (getverify()printf(DOS verify flag is on);elseprintf(DOS verify flag is off);return 0;函数名称: geninterrupt函数原型: void geninterrupt(int intr)函数功能: 产生DOS软中断函数返回:参数说明: intr-中断号所属文件: #include #include void writechar(char ch);int main()clrscr();gotoxy(80,25);writechar(*);getch();return 0;void writechar(char ch)struct text_info ti;gettextinfo(&ti);_AH=9;_AL=ch;_BH=0;_BL=ti.attribute;_CX=1;geninterrupt(0x10);函数名称: enable函数原型: void enable(void)函数功能: 允许中断函数返回:参数说明:所属文件: #include #include #include #define INTR 0X1Cvoid interrupt (*oldhandler)();int count=0;void interrupt handler()disable();count+;enable();oldhandler();int main()oldhandler=getvect(INTR);setvect(INTR,handler);while (count20)printf(count is %d,count);setvect(INTR,oldhandler);return 0;函数名称: disable函数原型: void disable(void)函数功能: 禁止所有中断(不包括NMI中断)函数返回:参数说明:所属文件: #include #include #include #define INTR 0X1Cvoid interrupt (*oldhandler)();int count=0;void interrupt handler()disable();count+;enable();oldhandler();int main()oldhandler=getvect(INTR);setvect(INTR,handler);while (count20)printf(count is %d,count);setvect(INTR,oldhandler);return 0;函数名称: interrupt函数原型: void interrupt(*getvect(int intr) (void)函数功能: 申明一个函数为中断函数,该中断函数的中断号为intr函数返回: 以上不是一个函数,实际上是说明了中断函数的格式,比如我们要将一个函数fun()说明成中断函数,可写成: void interrupt( *fun )();参数说明:所属文件: #include #include void interrupt yourisr() /* Interrupt Service Routine (ISR) */disable();/* Body of ISR goes here */oldhandler();outportb(0x20,0x20); /* Send EOI to PIC1 */enable();#define INTNO 0x0Bint main()oldhandler = getvect(INTNO); /* Save Old Interrupt Vector */setvect(INTNO, yourisr); /* Set New Interrupt Vector Entry */outportb(0x21,(inportb(0x21) & 0xF7); /* Un-Mask (Enable) IRQ3 */* Set Card - Port to Generate Interrupts */* Body of Program Goes Here */* Reset Card - Port as to Stop Generating Interrupts */outportb(0x21,(inportb(0x21) | 0x08); /* Mask (Disable) IRQ3 */setvect(INTNO, oldhandler); /* Restore old Interrupt Vector Before Exit */return 0;函数名称: setvect,getvect函数原型: void setvect(int interruptno, void interrupt (*isr)()函数功能: 为指定的中断向量设置中断服务函数函数返回: getvect返回interruptno中保存的4字节值参数说明: interruptno-中断向量,isr-中断函数,该函数应使用interrupt关键字声明所属文件: #include #include #include #define INTR 0X1C /* The clock tick interrupt */#ifdef _cplusplus#define _CPPARGS .#else#define _CPPARGS#endifvoid interrupt ( *oldhandler)(_CPPARGS);int count=0;void interrupt handler(_CPPARGS) /* increase the global counter */count+;/* call the old routine */oldhandler();int main()/* save the old interrupt vector */oldhandler = getvect(INTR);/* install the new interrupt handler */setvect(INTR,handler);/* loop until the counter exceeds 20 */while (count20)printf(count is %dn,count);/* reset the old interrupt handler */setvect(INTR,oldhandler);return 0;函数名称: inport函数原型: int inport(int port)函数功能: 返回从指定的I/O端口读入一个字(16位数)函数返回: 读入的字数值参数说明: port-I/O端口地址所属文件: #include #include int main()int result;int port=0;result=inport(port);printf(Word read from port %d=0x%X,port,result);return 0;函数名称: inportb函数原型: int inportb(int port)函数功能: 返回从指定的I/O端口读入一个字节(8位数)函数返回: 读入的字数值参数说明: port-I/O端口地址所属文件: #include #include int main()int result;int port=0;result=inportb(port);printf(Word read from port %d=0x%X,port,result);return 0;函数名称: outport函数原型: void outport(int port, int value)函数功能: 向port地址的接口输出value函数返回:参数说明: port-端口地址,value-要输出的16位数所属文件: #include #include int main()int value=64;int port=0;outportb(port,value);printf(Value %d sent to port number %d,value,port);return 0;函数名称: outportb函数原型: void outportb(unsigned char port, unsigned char value)函数功能: 向port地址的接口输出value函数返回:参数说明: port-端口地址,value-要输出的8位数所属文件: #include #include int main()int value=64;int port=0;outportb(port,value);printf(Value %d sent to port number %d,value,port);return 0;函数名称: intdos函数原型: int intdos(union REGS *inregs, union REGS *outregs)函数功能: 调用DOS的INT21中断函数返回: AX参数说明:所属文件: #include #include int delete_file(char near *filename)union REGS regs;int ret;regs.h.ah=0x41;regs.x.dx=(unsigned) filename;ret=intdos(®s,®s);return(regs.x.cflag ? ret : 0);int main()int err;err=delete_file(NOTEXIST.$);if (!err)printf(Able to delete NOTEXIST.$);elseprintf(Not Able to delete NOTEXIST.$);return 0;函数名称: intdosx函数原型: int intdosx(union REGS *inregs, union REGS *outregs, struct SREGS *segregs)函数功能: 调用DOS的INT21中断,主要用于大编译模式函数返回: AX参数说明:所属文件: #include #include int delete_file(char far *filename)union REGS regs;struct SREGS sregs;int ret;regs.h.ah=0x41;regs.x.dx=FP_OFF(filename);sregs.ds=FP_SEG(filename);ret=intdosx(®s,®s,&sregs);return(regs.x.cflag ? ret : 0);int main()int err;err=delete_file(NOTEXIST.$);if (!err)printf(Able to delete NOTEXIST.$);elseprintf(Not Able to delete NOTEXIST.$);return 0;函数名称: int86函数原型: int int86(int intno, union REGS *inregs, union REGS *outregs)函数功能: 调用中断号为intno的DOS软中断函数返回: AX参数说明:所属文件: #include #include #include #define VIDEO 0x10void movetoxy(int x,int y)union REGS regs;regs.h.ah=2;regs.h.dh=y;regs.h.dl=x;regs.h.bh=0;int86(VIDEO,®s,®s);int main()clrscr();movetoxy(35,10);printf(Hello);return 0;函数名称: int86x函数原型: int int86x(int intno, union REGS *inregs, union, REGS *outregs, struct SREGS *segregs)函数功能: 调用中断号为intno的DOS软中断,主要用于大编译模式函数返回: AX参数说明:所属文件: #include #include #include int main()char filename80;union REGS inregs,outregs;struct SREGS segregs;printf(Enter filename: );gets(filename);inregs.h.ah=0x43;inregs.h.al=0x21;inregs.x.dx=FP_OFF(filename);segregs.ds=FP_SEG(filename);int86x(0x21,&inregs,&outregs,&segregs);printf(File attribute: %X,outregs.x.cx);return 0;函数名称: intr函数原型: void intr(int intno, struct REGPACK *preg)函数功能: 调用中断号为intno的DOS软中断,是int86函数的一个替代函数函数返回:参数说明:所属文件: #include #include #include #include #define CF 1int main()char directory80;struct REGPACK reg;printf(Enter directory to change to: );gets(directory);reg.r_ax=0x3B8;reg.r_dx=FP_OFF(directory);reg.r_ds=FP_SEG(directory);intr(0x21,®);if (reg.r_flags&CF)printf(Directory change failed);getcwd(directory,80);printf(The current directory is: %s,directory);return 0;函数名称: keep函数原型: void keep(uns

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论