C库函数手册
C庫(kù)函數(shù)手冊(cè)
分類函數(shù),所在函數(shù)庫(kù)為ctype.h
intisalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
intisalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數(shù)字('0'-'9')
返回非0值,否則返回0
intisascii(int ch) 若ch是字符(ASCII碼中的0-127)返回非0值,否則返回0
intiscntrl(int ch) 若ch是作廢字符(0x7F)或普通控制字符(0x00-0x1F)
返回非0值,否則返回0
intisdigit(int ch) 若ch是數(shù)字('0'-'9')返回非0值,否則返回0
intisgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否則返回0
intislower(int ch) 若ch是小寫字母('a'-'z')返回非0值,否則返回0
intisprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否則返回0
intispunct(int ch) 若ch是標(biāo)點(diǎn)字符(0x00-0x1F)返回非0值,否則返回0
intisspace(int ch) 若ch是空格(''),水平制表符('\t'),回車符('\r'),
走紙換行('\f'),垂直制表符('\v'),換行符('\n')
返回非0值,否則返回0
intisupper(int ch) 若ch是大寫字母('A'-'Z')返回非0值,否則返回0
intisxdigit(int ch) 若ch是16進(jìn)制數(shù)('0'-'9','A'-'F','a'-'f')返回非0值,
否則返回0
inttolower(int ch) 若ch是大寫字母('A'-'Z')返回相應(yīng)的小寫字母('a'-'z')
inttoupper(int ch) 若ch是小寫字母('a'-'z')返回相應(yīng)的大寫字母('A'-'Z')
======================================================================
數(shù)學(xué)函數(shù),所在函數(shù)庫(kù)為math.h、stdlib.h、string.h、float.h
int abs(int i) 返回整型參數(shù)i的絕對(duì)值
double cabs(struct complex znum) 返回復(fù)數(shù)znum的絕對(duì)值
double fabs(double x) 返回雙精度參數(shù)x的絕對(duì)值
long labs(long n) 返回長(zhǎng)整型參數(shù)n的絕對(duì)值
double exp(double x) 返回指數(shù)函數(shù)ex的值
doublefrexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中
doubleldexp(double value,int exp); 返回value*2exp的值
double log(double x) 返回logex的值
doublelog10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
doublepow10(int p) 返回10p的值
double sqrt(double x) 返回+√x的值
double acos(double x) 返回x的反余弦cos-1(x)值,x為弧度
double asin(double x) 返回x的反正弦sin-1(x)值,x為弧度
double atan(double x) 返回x的反正切tan-1(x)值,x為弧度
doubleatan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x為弧度
double cos(double x) 返回x的余弦cos(x)值,x為弧度
double sin(double x) 返回x的正弦sin(x)值,x為弧度
double tan(double x) 返回x的正切tan(x)值,x為弧度
double cosh(double x) 返回x的雙曲余弦cosh(x)值,x為弧度
double sinh(double x) 返回x的雙曲正弦sinh(x)值,x為弧度
double tanh(double x) 返回x的雙曲正切tanh(x)值,x為弧度
doublehypot(double x,double y) 返回直角三角形斜邊的長(zhǎng)度(z),
x和y為直角邊的長(zhǎng)度,z2=x2+y2
double ceil(double x) 返回不小于x的最小整數(shù)
doublefloor(double x) 返回不大于x的最大整數(shù)
void srand(unsigned seed) 初始化隨機(jī)數(shù)發(fā)生器
int rand() 產(chǎn)生一個(gè)隨機(jī)數(shù)并返回這個(gè)數(shù)
double poly(double x,int n,double c[])從參數(shù)產(chǎn)生一個(gè)多項(xiàng)式
double modf(double value,double *iptr)將雙精度數(shù)value分解成尾數(shù)和階
double fmod(double x,double y) 返回x/y的余數(shù)
doublefrexp(double value,int *eptr) 將雙精度數(shù)value分成尾數(shù)和階
double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成浮點(diǎn)數(shù)并返回這個(gè)浮點(diǎn)數(shù)
double atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整數(shù)并返回這個(gè)整數(shù)
double atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長(zhǎng)整數(shù)并返回這個(gè)整數(shù)
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *gcvt(double value,int ndigit,char *buf)
將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無(wú)符號(hào)整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *ltoa(long value,char *string,int radix)
將長(zhǎng)整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *itoa(int value,char *string,int radix)
將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時(shí)所用基數(shù)
doubleatof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個(gè)數(shù),錯(cuò)誤返回0
long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長(zhǎng)整型數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
doublestrtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),
long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長(zhǎng)整型數(shù),
并返回這個(gè)數(shù),
int matherr(struct exception *e)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒(méi)有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double*arg2p,double retval)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒(méi)有必要使用)
unsignedint _clear87() 清除浮點(diǎn)狀態(tài)字并返回原來(lái)的浮點(diǎn)狀態(tài)
void _fpreset() 重新初使化浮點(diǎn)數(shù)學(xué)程序包
unsignedint _status87() 返回浮點(diǎn)狀態(tài)字
======================================================================
目錄函數(shù),所在函數(shù)庫(kù)為dir.h、dos.h
int chdir(char *path) 使指定的目錄path(如:"C:\\WPS")變成當(dāng)前的工作目錄,成
功返回0
intfindfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功
返回0
pathname為指定的目錄名和文件名,如"C:\\WPS\\TXT"
ffblk為指定的保存文件信息的一個(gè)結(jié)構(gòu),定義如下:
┏━━━━━━━━━━━━━━━━━━┓
┃structffblk ┃
┃{ ┃
┃ charff_reserved[21]; /*DOS保留字*/┃
┃ charff_attrib; /*文件屬性*/┃
┃ int ff_ftime; /*文件時(shí)間*/┃
┃ int ff_fdate; /*文件日期*/┃
┃ longff_fsize; /*文件長(zhǎng)度*/┃
┃ charff_name[13]; /*文件名*/ ┃
┃} ┃
┗━━━━━━━━━━━━━━━━━━┛
attrib為文件屬性,由以下字符代表
┏━━━━━━━━━┳━━━━━━━━┓
┃FA_RDONLY只讀文件┃FA_LABEL 卷標(biāo)號(hào)┃
┃FA_HIDDEN隱藏文件┃FA_DIREC 目錄 ┃
┃FA_SYSTEM系統(tǒng)文件┃FA_ARCH 檔案 ┃
┗━━━━━━━━━┻━━━━━━━━┛
例:
structffblk ff;
findfirst("*.wps",&ff,FA_RDONLY);
int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0
void fumerge(char *path,char *drive,char *dir,char *name,char *ext)
此函數(shù)通過(guò)盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴(kuò)展名ext(.EXE、.COM等)組成一個(gè)文件名
存與path中.
int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)
此函數(shù)將文件名path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴(kuò)展名ext(.EXE、.COM等),并分別存入相應(yīng)的變量中.
int getcurdir(int drive,char *direc) 此函數(shù)返回指定驅(qū)動(dòng)器的當(dāng)前工作目錄名稱
drive指定的驅(qū)動(dòng)器(0=當(dāng)前,1=A,2=B,3=C等)
direc保存指定驅(qū)動(dòng)器當(dāng)前工作路徑的變量 成功返回0
char*getcwd(char *buf,iint n) 此函數(shù)取當(dāng)前工作目錄并存入buf中,直到n個(gè)字
節(jié)長(zhǎng)為為止.錯(cuò)誤返回NULL
int getdisk() 取當(dāng)前正在使用的驅(qū)動(dòng)器,返回一個(gè)整數(shù)(0=A,1=B,2=C等)
int setdisk(int drive) 設(shè)置要使用的驅(qū)動(dòng)器drive(0=A,1=B,2=C等),
返回可使用驅(qū)動(dòng)器總數(shù)
int mkdir(char *pathname) 建立一個(gè)新的目錄pathname,成功返回0
int rmdir(char *pathname) 刪除一個(gè)目錄pathname,成功返回0
char*mktemp(char *template) 構(gòu)造一個(gè)當(dāng)前目錄上沒(méi)有的文件名并存于template中
char*searchpath(char *pathname) 利用MSDOS找出文件filename所在路徑,
,此函數(shù)使用DOS的PATH變量,未找到文件返回NULL
======================================================================
進(jìn)程函數(shù),所在函數(shù)庫(kù)為stdlib.h、process.h
void abort() 此函數(shù)通過(guò)調(diào)用具有出口代碼3的_exit寫一個(gè)終止信息于stderr,
并異常終止程序。無(wú)返回值
int exec…裝入和運(yùn)行其它程序
int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,…,
char*argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函數(shù)族裝入并運(yùn)行程序pathname,并將參數(shù)
arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯(cuò)返回-1
在exec函數(shù)族中,后綴l、v、p、e添加到exec后,
所指定的函數(shù)將具有某種操作能力
有后綴 p時(shí),函數(shù)可以利用DOS的PATH變量查找子程序文件。
l時(shí),函數(shù)中被傳遞的參數(shù)個(gè)數(shù)固定。
v時(shí),函數(shù)中被傳遞的參數(shù)個(gè)數(shù)不固定。
e時(shí),函數(shù)傳遞指定參數(shù)envp,允許改變子進(jìn)程的環(huán)境,
無(wú)后綴e時(shí),子進(jìn)程使用當(dāng)前程序的環(huán)境。
void _exit(int status)終止當(dāng)前程序,但不清理現(xiàn)場(chǎng)
void exit(int status) 終止當(dāng)前程序,關(guān)閉所有文件,寫緩沖區(qū)的輸出(等待輸出),
并調(diào)用任何寄存器的"出口函數(shù)",無(wú)返回值
int spawn…運(yùn)行子程序
int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
char*argn,NULL)
int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
char*argn,NULL,char *envp[])
int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
char*argn,NULL)
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
char*argn,NULL,char *envp[])
int spawnv( int mode,char *pathname,char *argv[])
int spawnve( int mode,char *pathname,char *argv[],char *envp[])
int spawnvp( int mode,char *pathname,char *argv[])
int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函數(shù)族在mode模式下運(yùn)行子程序pathname,并將參數(shù)
arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯(cuò)返回-1
mode為運(yùn)行模式
mode為P_WAIT 表示在子程序運(yùn)行完后返回本程序
P_NOWAIT表示在子程序運(yùn)行時(shí)同時(shí)運(yùn)行本程序(不可用)
P_OVERLAY表示在本程序退出后運(yùn)行子程序
在spawn函數(shù)族中,后綴l、v、p、e添加到spawn后,
所指定的函數(shù)將具有某種操作能力
有后綴p時(shí),函數(shù)利用DOS的PATH查找子程序文件
l時(shí),函數(shù)傳遞的參數(shù)個(gè)數(shù)固定.
v時(shí),函數(shù)傳遞的參數(shù)個(gè)數(shù)不固定.
e時(shí),指定參數(shù)envp可以傳遞給子程序,允許改變子程序運(yùn)行環(huán)境.
當(dāng)無(wú)后綴e時(shí),子程序使用本程序的環(huán)境.
int system(char *command) 將MSDOS命令command傳遞給DOS執(zhí)行
======================================================================
轉(zhuǎn)換子程序,函數(shù)庫(kù)為math.h、stdlib.h、ctype.h、float.h
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *gcvt(double value,int ndigit,char *buf)
將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無(wú)符號(hào)整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *ltoa(long value,char *string,int radix)
將長(zhǎng)整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *itoa(int value,char *string,int radix)
將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時(shí)所用基數(shù)
doubleatof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個(gè)數(shù),錯(cuò)誤返回0
long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長(zhǎng)整型數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
doublestrtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),
long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長(zhǎng)整型數(shù),
并返回這個(gè)數(shù),
int toascii(int c) 返回c相應(yīng)的ASCII
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應(yīng)的小寫字母('a'-'z')
int _tolower(int ch) 返回ch相應(yīng)的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應(yīng)的大寫字母('A'-'Z')
int _toupper(int ch) 返回ch相應(yīng)的大寫字母('A'-'Z')
======================================================================
診斷函數(shù),所在函數(shù)庫(kù)為assert.h、math.h
void assert(int test) 一個(gè)擴(kuò)展成if語(yǔ)句那樣的宏,如果test測(cè)試失敗,
就顯示一個(gè)信息并異常終止程序,無(wú)返回值
void perror(char *string) 本函數(shù)將顯示最近一次的錯(cuò)誤信息,格式如下:
字符串string:錯(cuò)誤信息
char *strerror(char *str) 本函數(shù)返回最近一次的錯(cuò)誤信息,格式如下:
字符串str:錯(cuò)誤信息
int matherr(struct exception *e)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒(méi)有必要使用)
double_matherr(_mexcep why,char *fun,double *arg1p,
double*arg2p,double retval)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒(méi)有必要使用)
======================================================================
輸入輸出子程序,函數(shù)庫(kù)為io.h、conio.h、stat.h、dos.h、stdio.h、signal.h
int kbhit() 本函數(shù)返回最近所敲的按鍵
int fgetchar() 從控制臺(tái)(鍵盤)讀一個(gè)字符,顯示在屏幕上
int getch() 從控制臺(tái)(鍵盤)讀一個(gè)字符,不顯示在屏幕上
int putch() 向控制臺(tái)(鍵盤)寫一個(gè)字符
int getchar() 從控制臺(tái)(鍵盤)讀一個(gè)字符,顯示在屏幕上
int putchar() 向控制臺(tái)(鍵盤)寫一個(gè)字符
int getche() 從控制臺(tái)(鍵盤)讀一個(gè)字符,顯示在屏幕上
int ungetch(int c) 把字符c退回給控制臺(tái)(鍵盤)
char*cgets(char *string) 從控制臺(tái)(鍵盤)讀入字符串存于string中
int scanf(char *format[,argument…])從控制臺(tái)讀入一個(gè)字符串,分別對(duì)各個(gè)參數(shù)進(jìn)行
賦值,使用BIOS進(jìn)行輸出
int vscanf(char *format,Valist param)從控制臺(tái)讀入一個(gè)字符串,分別對(duì)各個(gè)參數(shù)進(jìn)行
賦值,使用BIOS進(jìn)行輸出,參數(shù)從Valistparam中取得
int cscanf(char *format[,argument…])從控制臺(tái)讀入一個(gè)字符串,分別對(duì)各個(gè)參數(shù)進(jìn)行
賦值,直接對(duì)控制臺(tái)作操作,比如顯示器在顯示時(shí)字符時(shí)即為直接寫頻方式顯示
int sscanf(char *string,char *format[,argument,…])通過(guò)字符串string,分別對(duì)各個(gè)
參數(shù)進(jìn)行賦值
int vsscanf(char *string,char *format,Vlist param)通過(guò)字符串string,分別對(duì)各個(gè)
參數(shù)進(jìn)行賦值,參數(shù)從Vlistparam中取得
int puts(char *string) 發(fā)關(guān)一個(gè)字符串string給控制臺(tái)(顯示器),
使用BIOS進(jìn)行輸出
void cputs(char *string) 發(fā)送一個(gè)字符串string給控制臺(tái)(顯示器),
直接對(duì)控制臺(tái)作操作,比如顯示器即為直接寫頻方式顯示
int printf(char *format[,argument,…])發(fā)送格式化字符串輸出給控制臺(tái)(顯示器)
使用BIOS進(jìn)行輸出
int vprintf(char *format,Valist param) 發(fā)送格式化字符串輸出給控制臺(tái)(顯示器)
使用BIOS進(jìn)行輸出,參數(shù)從Valistparam中取得
int cprintf(char *format[,argument,…])發(fā)送格式化字符串輸出給控制臺(tái)(顯示器),
直接對(duì)控制臺(tái)作操作,比如顯示器即為直接寫頻方式顯示
int vcprintf(char *format,Valist param)發(fā)送格式化字符串輸出給控制臺(tái)(顯示器),
直接對(duì)控制臺(tái)作操作,比如顯示器即為直接寫頻方式顯示,
參數(shù)從Valistparam中取得
int sprintf(char *string,char *format[,argument,…])
將字符串string的內(nèi)容重新寫為格式化后的字符串
int vsprintf(char *string,char *format,Valist param)
將字符串string的內(nèi)容重新寫為格式化后的字符串,參數(shù)從Valistparam中取得
int rename(char *oldname,char *newname)將文件oldname的名稱改為newname
int ioctl(int handle,int cmd[,int *argdx,int argcx])
本函數(shù)是用來(lái)控制輸入/輸出設(shè)備的,請(qǐng)見(jiàn)下表:
┌───┬────────────────────────────┐
│cmd值│功能 │
├───┼────────────────────────────┤
│ 0 │取出設(shè)備信息 │
│ 1 │設(shè)置設(shè)備信息 │
│ 2 │把argcx字節(jié)讀入由argdx所指的地址 │
│ 3 │在argdx所指的地址寫argcx字節(jié) │
│ 4 │除把handle當(dāng)作設(shè)備號(hào)(0=當(dāng)前,1=A,等)之外,均和cmd=2時(shí)一樣│
│ 5 │除把handle當(dāng)作設(shè)備號(hào)(0=當(dāng)前,1=A,等)之外,均和cmd=3時(shí)一樣│
│ 6 │取輸入狀態(tài) │
│ 7 │取輸出狀態(tài) │
│ 8 │測(cè)試可換性;只對(duì)于DOS3.x │
│ 11 │置分享沖突的重算計(jì)數(shù);只對(duì)DOS3.x │
└───┴────────────────────────────┘
int (*ssignal(int sig,int(*action)())()執(zhí)行軟件信號(hào)(沒(méi)必要使用)
int gsignal(int sig) 執(zhí)行軟件信號(hào)(沒(méi)必要使用)
int _open(char *pathname,int access)為讀或?qū)懘蜷_(kāi)一個(gè)文件,
按后按access來(lái)確定是讀文件還是寫文件,access值見(jiàn)下表
┌──────┬────────────────────┐
│access值 │意義 │
├──────┼────────────────────┤
│O_RDONLY │讀文件 │
│O_WRONLY │寫文件 │
│O_RDWR │即讀也寫 │
│O_NOINHERIT│若文件沒(méi)有傳遞給子程序,則被包含 │
│O_DENYALL │只允許當(dāng)前處理必須存取的文件 │
│O_DENYWRITE│只允許從任何其它打開(kāi)的文件讀 │
│O_DENYREAD │只允許從任何其它打開(kāi)的文件寫 │
│O_DENYNONE │允許其它共享打開(kāi)的文件 │
└──────┴────────────────────┘
int open(char *pathname,int access[,int permiss])為讀或?qū)懘蜷_(kāi)一個(gè)文件,
按后按access來(lái)確定是讀文件還是寫文件,access值見(jiàn)下表
┌────┬────────────────────┐
│access值│意義 │
├────┼────────────────────┤
│O_RDONLY│讀文件 │
│O_WRONLY│寫文件 │
│O_RDWR │即讀也寫 │
│O_NDELAY│沒(méi)有使用;對(duì)UNIX系統(tǒng)兼容 │
│O_APPEND│即讀也寫,但每次寫總是在文件尾添加 │
│O_CREAT│若文件存在,此標(biāo)志無(wú)用;若不存在,建新文件│
│O_TRUNC│若文件存在,則長(zhǎng)度被截為0,屬性不變 │
│O_EXCL │未用;對(duì)UNIX系統(tǒng)兼容 │
│O_BINARY│此標(biāo)志可顯示地給出以二進(jìn)制方式打開(kāi)文件 │
│O_TEXT │此標(biāo)志可用于顯示地給出以文本方式打開(kāi)文件│
└────┴────────────────────┘
permiss為文件屬性,可為以下值:
S_IWRITE允許寫 S_IREAD允許讀 S_IREAD|S_IWRITE允許讀、寫
int creat(char *filename,int permiss) 建立一個(gè)新文件filename,并設(shè)定
讀寫性。permiss為文件讀寫性,可以為以下值
S_IWRITE允許寫 S_IREAD允許讀 S_IREAD|S_IWRITE允許讀、寫
int _creat(char *filename,int attrib) 建立一個(gè)新文件filename,并設(shè)定文件
屬性。attrib為文件屬性,可以為以下值
FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統(tǒng)
int creatnew(char *filenamt,int attrib) 建立一個(gè)新文件filename,并設(shè)定文件
屬性。attrib為文件屬性,可以為以下值
FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統(tǒng)
int creattemp(char *filenamt,int attrib) 建立一個(gè)新文件filename,并設(shè)定文件
屬性。attrib為文件屬性,可以為以下值
FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統(tǒng)
int read(int handle,void *buf,int nbyte)從文件號(hào)為handle的文件中讀nbyte個(gè)字符
存入buf中
int _read(int handle,void *buf,int nbyte)從文件號(hào)為handle的文件中讀nbyte個(gè)字符
存入buf中,直接調(diào)用MSDOS進(jìn)行操作.
int write(int handle,void *buf,int nbyte)將buf中的nbyte個(gè)字符寫入文件號(hào)
為handle的文件中
int _write(int handle,void *buf,int nbyte)將buf中的nbyte個(gè)字符寫入文件號(hào)
為handle的文件中
int dup(int handle) 復(fù)制一個(gè)文件處理指針handle,返回這個(gè)指針
int dup2(int handle,int newhandle) 復(fù)制一個(gè)文件處理指針handle到newhandle
int eof(int *handle)檢查文件是否結(jié)束,結(jié)束返回1,否則返回0
long filelength(int handle) 返回文件長(zhǎng)度,handle為文件號(hào)
int setmode(int handle,unsigned mode)本函數(shù)用來(lái)設(shè)定文件號(hào)為handle的文件的打
開(kāi)方式
int getftime(int handle,struct ftime *ftime) 讀取文件號(hào)為handle的文件的時(shí)間,
并將文件時(shí)間存于ftime結(jié)構(gòu)中,成功返回0,ftime結(jié)構(gòu)如下:
┌─────────────────┐
│structftime │
│{ │
│ unsignedft_tsec:5; /*秒*/ │
│ unsignedft_min:6; /*分*/ │
│ unsignedft_hour:5; /*時(shí)*/ │
│ unsignedft_day:5; /*日*/ │
│ unsignedft_month:4;/*月*/ │
│ unsignedft_year:1; /*年-1980*/ │
│} │
└─────────────────┘
int setftime(int handle,struct ftime *ftime) 重寫文件號(hào)為handle的文件時(shí)間,
新時(shí)間在結(jié)構(gòu)ftime中.成功返回0.結(jié)構(gòu)ftime如下:
┌─────────────────┐
│structftime │
│{ │
│ unsignedft_tsec:5; /*秒*/ │
│ unsignedft_min:6; /*分*/ │
│ unsignedft_hour:5; /*時(shí)*/ │
│ unsignedft_day:5; /*日*/ │
│ unsignedft_month:4;/*月*/ │
│ unsignedft_year:1; /*年-1980*/ │
│} │
└─────────────────┘
long lseek(int handle,long offset,int fromwhere) 本函數(shù)將文件號(hào)為handle的文件
的指針移到fromwhere后的第offset個(gè)字節(jié)處.
SEEK_SET文件開(kāi)關(guān) SEEK_CUR當(dāng)前位置 SEEK_END文件尾
long tell(int handle) 本函數(shù)返回文件號(hào)為handle的文件指針,以字節(jié)表示
int isatty(int handle)本函數(shù)用來(lái)取設(shè)備handle的類型
int lock(int handle,long offset,long length) 對(duì)文件共享作封鎖
int unlock(int handle,long offset,long length) 打開(kāi)對(duì)文件共享的封鎖
int close(int handle) 關(guān)閉handle所表示的文件處理,handle是從_creat、creat、
creatnew、creattemp、dup、dup2、_open、open中的一個(gè)處調(diào)用獲得的文件處理
成功返回0否則返回-1,可用于UNIX系統(tǒng)
int _close(int handle) 關(guān)閉handle所表示的文件處理,handle是從_creat、creat、
creatnew、creattemp、dup、dup2、_open、open中的一個(gè)處調(diào)用獲得的文件處理
成功返回0否則返回-1,只能用于MSDOS系統(tǒng)
FILE*fopen(char *filename,char *type) 打開(kāi)一個(gè)文件filename,打開(kāi)方式為type,
并返回這個(gè)文件指針,type可為以下字符串加上后綴
┌──┬────┬───────┬────────┐
│type│讀寫性 │文本/2進(jìn)制文件│建新/打開(kāi)舊文件│
├──┼────┼───────┼────────┤
│r │讀 │文本 │打開(kāi)舊的文件 │
│w │寫 │文本 │建新文件 │
│a │添加 │文本 │有就打開(kāi)無(wú)則建新│
│r+ │讀/寫 │不限制 │打開(kāi) │
│w+ │讀/寫 │不限制 │建新文件 │
│a+ │讀/添加│不限制 │有就打開(kāi)無(wú)則建新│
└──┴────┴───────┴────────┘
可加的后綴為t、b。加b表示文件以二進(jìn)制形式進(jìn)行操作,t沒(méi)必要使用
例:┌──────────────────┐
│#include<stdio.h> │
│main() │
│{ │
│ FILE*fp; │
│fp=fopen("C:\\WPS\\WPS.EXE","r+b");│
└──────────────────┘
FILE*fdopen(int ahndle,char *type)
FILE*freopen(char *filename,char *type,FILE *stream)
int getc(FILE *stream) 從流stream中讀一個(gè)字符,并返回這個(gè)字符
int putc(int ch,FILE *stream)向流stream寫入一個(gè)字符ch
int getw(FILE *stream) 從流stream讀入一個(gè)整數(shù),錯(cuò)誤返回EOF
int putw(int w,FILE *stream)向流stream寫入一個(gè)整數(shù)
int ungetc(char c,FILE *stream) 把字符c退回給流stream,下一次讀進(jìn)的字符將是c
int fgetc(FILE *stream) 從流stream處讀一個(gè)字符,并返回這個(gè)字符
int fputc(int ch,FILE *stream) 將字符ch寫入流stream中
char*fgets(char *string,int n,FILE *stream) 從流stream中讀n個(gè)字符存入string中
int fputs(char *string,FILE *stream) 將字符串string寫入流stream中
int fread(void *ptr,int size,int nitems,FILE *stream) 從流stream中讀入nitems
個(gè)長(zhǎng)度為size的字符串存入ptr中
int fwrite(void *ptr,int size,int nitems,FILE *stream)向流stream中寫入nitems
個(gè)長(zhǎng)度為size的字符串,字符串在ptr中
int fscanf(FILE *stream,char *format[,argument,…])以格式化形式從流stream中
讀入一個(gè)字符串
int vfscanf(FILE *stream,char *format,Valist param) 以格式化形式從流stream中
讀入一個(gè)字符串,參數(shù)從Valistparam中取得
int fprintf(FILE *stream,char *format[,argument,…]) 以格式化形式將一個(gè)字符
串寫給指定的流stream
int vfprintf(FILE *stream,char *format,Valist param) 以格式化形式將一個(gè)字符
串寫給指定的流stream,參數(shù)從Valistparam中取得
int fseek(FILE *stream,long offset,int fromwhere) 函數(shù)把文件指針移到fromwhere
所指位置的向后offset個(gè)字節(jié)處,fromwhere可以為以下值:
SEEK_SET文件開(kāi)關(guān) SEEK_CUR當(dāng)前位置 SEEK_END文件尾
long ftell(FILE *stream) 函數(shù)返回定位在stream中的當(dāng)前文件指針位置,以字節(jié)表示
int rewind(FILE *stream) 將當(dāng)前文件指針stream移到文件開(kāi)頭
int feof(FILE *stream) 檢測(cè)流stream上的文件指針是否在結(jié)束位置
int fileno(FILE *stream) 取流stream上的文件處理,并返回文件處理
int ferror(FILE *stream) 檢測(cè)流stream上是否有讀寫錯(cuò)誤,如有錯(cuò)誤就返回1
void clearerr(FILE *stream) 清除流stream上的讀寫錯(cuò)誤
void setbuf(FILE *stream,char *buf) 給流stream指定一個(gè)緩沖區(qū)buf
void setvbuf(FILE *stream,char *buf,int type,unsigned size)
給流stream指定一個(gè)緩沖區(qū)buf,大小為size,類型為type,type的值見(jiàn)下表
┌───┬───────────────────────────────┐
│type值│意義 │
├───┼───────────────────────────────┤
│_IOFBF│文件是完全緩沖區(qū),當(dāng)緩沖區(qū)是空時(shí),下一個(gè)輸入操作將企圖填滿整個(gè)緩│
│ │沖區(qū).在輸出時(shí),在把任何數(shù)據(jù)寫到文件之前,將完全填充緩沖區(qū). │
│_IOLBF│文件是行緩沖區(qū).當(dāng)緩沖區(qū)為空時(shí),下一個(gè)輸入操作將仍然企圖填整個(gè)緩│
│ │沖區(qū).然而在輸出時(shí),每當(dāng)新行符寫到文件,緩沖區(qū)就被清洗掉. │
│_IONBF│文件是無(wú)緩沖的.buf和size參數(shù)是被忽略的.每個(gè)輸入操作將直接從文│
│ │件讀,每個(gè)輸出操作將立即把數(shù)據(jù)寫到文件中. │
└───┴───────────────────────────────┘
int fclose(FILE *stream) 關(guān)閉一個(gè)流,可以是文件或設(shè)備(例如LPT1)
int fcloseall() 關(guān)閉所有除stdin或stdout外的流
int fflush(FILE *stream) 關(guān)閉一個(gè)流,并對(duì)緩沖區(qū)作處理
處理即對(duì)讀的流,將流內(nèi)內(nèi)容讀入緩沖區(qū);
對(duì)寫的流,將緩沖區(qū)內(nèi)內(nèi)容寫入流。成功返回0
int fflushall() 關(guān)閉所有流,并對(duì)流各自的緩沖區(qū)作處理
處理即對(duì)讀的流,將流內(nèi)內(nèi)容讀入緩沖區(qū);
對(duì)寫的流,將緩沖區(qū)內(nèi)內(nèi)容寫入流。成功返回0
int access(char *filename,int amode) 本函數(shù)檢查文件filename并返回文件的屬性,
函數(shù)將屬性存于amode中,amode由以下位的組合構(gòu)成
06可以讀、寫 04可以讀 02可以寫 01執(zhí)行(忽略的) 00文件存在
如果filename是一個(gè)目錄,函數(shù)將只確定目錄是否存在
函數(shù)執(zhí)行成功返回0,否則返回-1
int chmod(char *filename,int permiss) 本函數(shù)用于設(shè)定文件filename的屬性
permiss可以為以下值
S_IWRITE允許寫 S_IREAD允許讀 S_IREAD|S_IWRITE允許讀、寫
int _chmod(char *filename,int func[,int attrib]);
本函數(shù)用于讀取或設(shè)定文件filename的屬性,
當(dāng)func=0時(shí),函數(shù)返回文件的屬性;當(dāng)func=1時(shí),函數(shù)設(shè)定文件的屬性
若為設(shè)定文件屬性,attrib可以為下列常數(shù)之一
FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統(tǒng)
================================================================================
接口子程序,所在函數(shù)庫(kù)為:dos.h、bios.h
unsignedsleep(unsigned seconds)暫停seconds微秒(百分之一秒)
int unlink(char *filename)刪除文件filename
unsignedFP_OFF(void far *farptr)本函數(shù)用來(lái)取遠(yuǎn)指針farptr的偏移量
unsignedFP_SEG(void far *farptr)本函數(shù)用來(lái)沒(méi)置遠(yuǎn)指針farptr的段值
voidfar *MK_FP(unsigned seg,unsigned off)根據(jù)段seg和偏移量off構(gòu)造一個(gè)far指針
unsignedgetpsp()取程序段前綴的段地址,并返回這個(gè)地址
char*parsfnm(char *cmdline,struct fcb *fcbptr,int option)
函數(shù)分析一個(gè)字符串,通常,對(duì)一個(gè)文件名來(lái)說(shuō),是由cmdline所指的一個(gè)命令行.
文件名是放入一個(gè)FCB中作為一個(gè)驅(qū)動(dòng)器,文件名和擴(kuò)展名.FCB是由fcbptr所指
定的.option參數(shù)是DOS分析系統(tǒng)調(diào)用時(shí),AL文本的值.
int absread(int drive,int nsects,int sectno,void *buffer)本函數(shù)功能為讀特定的
磁盤扇區(qū),drive為驅(qū)動(dòng)器號(hào)(0=A,1=B等),nsects為要讀的扇區(qū)數(shù),sectno為開(kāi)始的邏
輯扇區(qū)號(hào),buffer為保存所讀數(shù)據(jù)的保存空間
int abswrite(int drive,int nsects,int sectno,void *buffer)本函數(shù)功能為寫特定的
磁盤扇區(qū),drive為驅(qū)動(dòng)器號(hào)(0=A,1=B等),nsects為要寫的扇區(qū)數(shù),sectno為開(kāi)始的邏
輯扇區(qū)號(hào),buffer為保存所寫數(shù)據(jù)的所在空間
void getdfree(int drive,struct dfree *dfreep)本函數(shù)用來(lái)取磁盤的自由空間,
drive為磁盤號(hào)(0=當(dāng)前,1=A等).函數(shù)將磁盤特性的由dfreep指向的dfree結(jié)構(gòu)中.
dfree結(jié)構(gòu)如下:
┌───────────────────┐
│structdfree │
│{ │
│ unsigneddf_avail; /*有用簇個(gè)數(shù)*/ │
│ unsigneddf_total; /*總共簇個(gè)數(shù)*/ │
│ unsigneddf_bsec; /*每個(gè)扇區(qū)字節(jié)數(shù)*/│
│ unsigneddf_sclus; /*每個(gè)簇扇區(qū)數(shù)*/ │
│} │
└───────────────────┘
charfar *getdta() 取磁盤轉(zhuǎn)換地址DTA
void setdta(char far *dta)設(shè)置磁盤轉(zhuǎn)換地址DTA
void getfat(int drive,fatinfo *fatblkp)
本函數(shù)返回指定驅(qū)動(dòng)器drive(0=當(dāng)前,1=A,2=B等)的文件分配表信息
并存入結(jié)構(gòu)fatblkp中,結(jié)構(gòu)如下:
┌──────────────────┐
│structfatinfo │
│{ │
│ charfi_sclus; /*每個(gè)簇扇區(qū)數(shù)*/ │
│ charfi_fatid; /*文件分配表字節(jié)數(shù)*/│
│ int fi_nclus; /*簇的數(shù)目*/ │
│ int fi_bysec; /*每個(gè)扇區(qū)字節(jié)數(shù)*/ │
│} │
└──────────────────┘
void getfatd(struct fatinfo *fatblkp) 本函數(shù)返回當(dāng)前驅(qū)動(dòng)器的文件分配表信息,
并存入結(jié)構(gòu)fatblkp中,結(jié)構(gòu)如下:
┌──────────────────┐
│structfatinfo │
│{ │
│ charfi_sclus; /*每個(gè)簇扇區(qū)數(shù)*/ │
│ charfi_fatid; /*文件分配表字節(jié)數(shù)*/│
│ int fi_nclus; /*簇的數(shù)目*/ │
│ int fi_bysec; /*每個(gè)扇區(qū)字節(jié)數(shù)*/ │
│} │
└──────────────────┘
int bdos(int dosfun,unsigned dosdx,unsigned dosal)本函數(shù)對(duì)MSDOS系統(tǒng)進(jìn)行調(diào)用,
dosdx為寄存器dx的值,dosal為寄存器al的值,dosfun為功能號(hào)
int bdosptr(int dosfun,void *argument,unsiigned dosal)本函數(shù)對(duì)MSDOS系統(tǒng)進(jìn)行調(diào)用,
argument為寄存器dx的值,dosal為寄存器al的值,dosfun為功能號(hào)
int int86(int intr_num,union REGS *inregs,union REGS *outregs)
執(zhí)行intr_num號(hào)中斷,用戶定義的寄存器值存于結(jié)構(gòu)inregs中,
執(zhí)行完后將返回的寄存器值存于結(jié)構(gòu)outregs中.
int int86x(int intr_num,union REGS *inregs,union REGS *outregs,
structSREGS *segregs)執(zhí)行intr_num號(hào)中斷,用戶定義的寄存器值存于
結(jié)構(gòu)inregs中和結(jié)構(gòu)segregs中,執(zhí)行完后將返回的寄存器值存于結(jié)構(gòu)outregs中.
int intdos(union REGS *inregs,union REGS *outregs)
本函數(shù)執(zhí)行DOS中斷0x21來(lái)調(diào)用一個(gè)指定的DOS函數(shù),用戶定義的寄存器值
存于結(jié)構(gòu)inregs中,執(zhí)行完后函數(shù)將返回的寄存器值存于結(jié)構(gòu)outregs中
int intdosx(union REGS *inregs,union REGS *outregs,struct SREGS*segregs)
本函數(shù)執(zhí)行DOS中斷0x21來(lái)調(diào)用一個(gè)指定的DOS函數(shù),用戶定義的寄存器值
存于結(jié)構(gòu)inregs和segregs中,執(zhí)行完后函數(shù)將返回的寄存器值存于結(jié)構(gòu)outregs中
void intr(int intr_num,struct REGPACK *preg)本函數(shù)中一個(gè)備用的8086軟件中斷接口
它能產(chǎn)生一個(gè)由參數(shù)intr_num指定的8086軟件中斷.函數(shù)在執(zhí)行軟件中斷前,
從結(jié)構(gòu)preg復(fù)制用戶定義的各寄存器值到各個(gè)寄存器.軟件中斷完成后,
函數(shù)將當(dāng)前各個(gè)寄存器的值復(fù)制到結(jié)構(gòu)preg中.參數(shù)如下:
intr_num被執(zhí)行的中斷號(hào)
preg為保存用戶定義的寄存器值的結(jié)構(gòu),結(jié)構(gòu)如下
┌──────────────────────┐
│structREGPACK │
│{ │
│ unsignedr_ax,r_bx,r_cx,r_dx; │
│ unsignedr_bp,r_si,r_di,r_ds,r_es,r_flags; │
│} │
└──────────────────────┘
函數(shù)執(zhí)行完后,將新的寄存器值存于結(jié)構(gòu)preg中
void keep(int status,int size)以status狀態(tài)返回MSDOS,但程序仍保留于內(nèi)存中,所占
用空間由size決定.
void ctrlbrk(int (*fptr)()) 設(shè)置中斷后的對(duì)中斷的處理程序.
void disable() 禁止發(fā)生中斷
void enable() 允許發(fā)生中斷
void geninterrupt(int intr_num)執(zhí)行由intr_num所指定的軟件中斷
void interrupt(* getvect(int intr_num))() 返回中斷號(hào)為intr_num的中斷處理程序,
例如:old_int_10h=getvect(0x10);
void setvect(int intr_num,void interrupt(* isr)()) 設(shè)置中斷號(hào)為intr_num的中
斷處理程序?yàn)?span style="font-family:Times New Roman,serif">isr,例如:setvect(0x10,new_int_10h);
void harderr(int (*fptr)()) 定義一個(gè)硬件錯(cuò)誤處理程序,
每當(dāng)出現(xiàn)錯(cuò)誤時(shí)就調(diào)用fptr所指的程序
void hardresume(int rescode)硬件錯(cuò)誤處理函數(shù)
void hardretn(int errcode) 硬件錯(cuò)誤處理函數(shù)
int inport(int prot) 從指定的輸入端口讀入一個(gè)字,并返回這個(gè)字
int inportb(int port)從指定的輸入端口讀入一個(gè)字節(jié),并返回這個(gè)字節(jié)
void outport(int port,int word) 將字word寫入指定的輸出端口port
void outportb(int port,char byte)將字節(jié)byte寫入指定的輸出端口port
int peek(int segment,unsigned offset) 函數(shù)返回segment:offset處的一個(gè)字
char peekb(int segment,unsigned offset)函數(shù)返回segment:offset處的一個(gè)字節(jié)
void poke(int segment,int offset,char value) 將字value寫到segment:offset處
void pokeb(int segment,int offset,int value) 將字節(jié)value寫到segment:offset處
int randbrd(struct fcb *fcbptr,int reccnt)
函數(shù)利用打開(kāi)fcbptr所指的FCB讀reccnt個(gè)記錄.
int randbwr(struct fcb *fcbptr,int reccnt)
函數(shù)將fcbptr所指的FCB中的reccnt個(gè)記錄寫到磁盤上
void segread(struct SREGS *segtbl)函數(shù)把段寄存器的當(dāng)前值放進(jìn)結(jié)構(gòu)segtbl中
int getverify() 取檢驗(yàn)標(biāo)志的當(dāng)前狀態(tài)(0=檢驗(yàn)關(guān)閉,1=檢驗(yàn)打開(kāi))
void setverify(int value)設(shè)置當(dāng)前檢驗(yàn)狀態(tài),
value為0表示關(guān)閉檢驗(yàn),為1表示打開(kāi)檢驗(yàn)
int getcbrk()本函數(shù)返回控制中斷檢測(cè)的當(dāng)前設(shè)置
int setcbrk(int value)本函數(shù)用來(lái)設(shè)置控制中斷檢測(cè)為接通或斷開(kāi)
當(dāng)value=0時(shí),為斷開(kāi)檢測(cè).當(dāng)value=1時(shí),為接開(kāi)檢測(cè)
int dosexterr(struct DOSERR *eblkp)取擴(kuò)展錯(cuò)誤.在DOS出現(xiàn)錯(cuò)誤后,此函數(shù)將擴(kuò)充的
錯(cuò)誤信息填入eblkp所指的DOSERR結(jié)構(gòu)中.該結(jié)構(gòu)定義如下:
┌──────────────┐
│structDOSERR │
│{ │
│ int exterror;/*擴(kuò)展錯(cuò)誤*/│
│ charclass; /*錯(cuò)誤類型*/│
│ charaction; /*方式*/ │
│ charlocus; /*錯(cuò)誤場(chǎng)所*/│
│} │
└──────────────┘
int bioscom(int cmd,char type,int port) 本函數(shù)負(fù)責(zé)對(duì)數(shù)據(jù)的通訊工作,
cmd可以為以下值:
0置通訊參數(shù)為字節(jié)byte值 1發(fā)送字符通過(guò)通訊線輸出
2從通訊線接受字符 3返回通訊的當(dāng)前狀態(tài)
port為通訊端口,port=0時(shí)通訊端口為COM1,port=1時(shí)通訊端口為COM2,以此類推
byte為傳送或接收數(shù)據(jù)時(shí)的參數(shù),為以下位的組合:
┌───┬─────┬───┬─────┬───┬─────┐
│byte值│意義 │byte值│意義 │byte值│意義 │ │
├───┼─────┼───┼─────┼───┼─────┤
│0x02 │7數(shù)據(jù)位 │0x03 │8數(shù)據(jù)位 │0x00 │1停止位 │ │
│0x04 │2停止位 │0x00 │無(wú)奇偶性 │0x08 │奇數(shù)奇偶性│ │
│0x18 │偶數(shù)奇偶性│0x00 │110波特 │0x20 │150波特 │ │
│0x40 │300波特 │0x60 │600波特 │0x80 │1200波特 │ │
│0xA0 │2400波特 │0xC0 │4800波特 │0xE0 │9600波特 │ │
└───┴─────┴───┴─────┴───┴─────┘
例如:0xE0|0x08|0x00|0x03即表示置通訊口為9600波特,奇數(shù)奇偶性,1停止位,
8數(shù)據(jù)位.
函數(shù)返回值為一個(gè)16位整數(shù),定義如下:
第15位超時(shí)
第14位傳送移位寄存器空
第13位傳送固定寄存器空
第12位中斷檢測(cè)
第11位幀錯(cuò)誤
第10位奇偶錯(cuò)誤
第9位過(guò)載運(yùn)行錯(cuò)誤
第8位數(shù)據(jù)就緒
第7位接收線信號(hào)檢測(cè)
第6位環(huán)形指示器
第5位數(shù)據(jù)設(shè)置就緒
第4位清除發(fā)送
第3位δ接收線信號(hào)檢測(cè)器
第2位下降邊環(huán)形檢測(cè)器
第1位δ數(shù)據(jù)設(shè)置就緒
第0位δ清除發(fā)送
int biosdisk(int cmd,int drive,int head,int track,
intsector,int nsects,void *buffer)
本函數(shù)用來(lái)對(duì)驅(qū)動(dòng)器作一定的操作,cmd為功能號(hào),
drive為驅(qū)動(dòng)器號(hào)(0=A,1=B,0x80=C,0x81=D,0x82=E等).cmd可為以下值:
0重置軟磁盤系統(tǒng).這強(qiáng)迫驅(qū)動(dòng)器控制器來(lái)執(zhí)行硬復(fù)位.忽略所有其它參數(shù).
1返回最后的硬盤操作狀態(tài).忽略所有其它參數(shù)
2讀一個(gè)或多個(gè)磁盤扇區(qū)到內(nèi)存.讀開(kāi)始的扇區(qū)由head、track、sector給出。
扇區(qū)號(hào)由nsects給出。把每個(gè)扇區(qū)512個(gè)字節(jié)的數(shù)據(jù)讀入buffer
3從內(nèi)存讀數(shù)據(jù)寫到一個(gè)或多個(gè)扇區(qū)。寫開(kāi)始的扇區(qū)由head、track、sector
給出。扇區(qū)號(hào)由nsects給出。所寫數(shù)據(jù)在buffer中,每扇區(qū)512個(gè)字節(jié)。
4檢驗(yàn)一個(gè)或多個(gè)扇區(qū)。開(kāi)始扇區(qū)由head、track、sector給出。扇區(qū)號(hào)由
nsects給出。
5格式化一個(gè)磁道,該磁道由head和track給出。buffer指向?qū)懺谥付?span style="font-family:Times New Roman,serif">track上
的扇區(qū)磁頭器的一個(gè)表。
以下cmd值只允許用于XT或AT微機(jī):
6格式化一個(gè)磁道,并置壞扇區(qū)標(biāo)志。
7格式化指定磁道上的驅(qū)動(dòng)器開(kāi)頭。
8返回當(dāng)前驅(qū)動(dòng)器參數(shù),驅(qū)動(dòng)器信息返回寫在buffer中(以四個(gè)字節(jié)表示)。
9初始化一對(duì)驅(qū)動(dòng)器特性。
10執(zhí)行一個(gè)長(zhǎng)的讀,每個(gè)扇區(qū)讀512加4個(gè)額外字節(jié)
11執(zhí)行一個(gè)長(zhǎng)的寫,每個(gè)扇區(qū)寫512加4個(gè)額外字節(jié)
12執(zhí)行一個(gè)磁盤查找
13交替磁盤復(fù)位
14讀扇區(qū)緩沖區(qū)
15寫扇區(qū)緩沖區(qū)
16檢查指定的驅(qū)動(dòng)器是否就緒
17復(fù)核驅(qū)動(dòng)器
18控制器RAM診斷
19驅(qū)動(dòng)器診斷
20控制器內(nèi)部診
函數(shù)返回由下列位組合成的狀態(tài)字節(jié):
0x00操作成功
0x01壞的命令
0x02地址標(biāo)記找不到
0x04記錄找不到
0x05重置失敗
0x07驅(qū)動(dòng)參數(shù)活動(dòng)失敗
0x09企圖DMA經(jīng)過(guò)64K界限
0x0B檢查壞的磁盤標(biāo)記
0x10壞的ECC在磁盤上讀
0x11ECC校正的數(shù)據(jù)錯(cuò)誤(注意它不是錯(cuò)誤)
0x20控制器失效
0x40查找失敗
0x80響應(yīng)的連接失敗
0xBB出現(xiàn)無(wú)定義錯(cuò)誤
0xFF讀出操作失敗
int biodquip() 檢查設(shè)備,函數(shù)返回一字節(jié),該字節(jié)每一位表示一個(gè)信息,如下:
第15位打印機(jī)號(hào)
第14位打印機(jī)號(hào)
第13位未使用
第12位連接游戲I/O
第11位RS232端口號(hào)
第8位未使用
第7位軟磁盤號(hào)
第6位軟磁盤號(hào),
00為1號(hào)驅(qū)動(dòng)器,01為2號(hào)驅(qū)動(dòng)器,10為3號(hào)驅(qū)動(dòng)器,11為4號(hào)驅(qū)動(dòng)器
第5位初始化
第4位顯示器模式
00為未使用,01為40x25BW彩色顯示卡
10為80x25BW彩色顯示卡,11為80x25BW單色顯示卡
第3位母扦件
第2位隨機(jī)存貯器容量,00為16K,01為32K,10為48K,11為64K
第1位浮點(diǎn)共用處理器
第0位從軟磁盤引導(dǎo)
int bioskey(int cmd)本函數(shù)用來(lái)執(zhí)行各種鍵盤操作,由cmd確定操作。
cmd可為以下值:
0返回敲鍵盤上的下一個(gè)鍵。若低8位為非0,即為ASCII字符;若低8位為0,
則返回?cái)U(kuò)充了的鍵盤代碼。
1測(cè)試鍵盤是否可用于讀。返回0表示沒(méi)有鍵可用;否則返回下一次敲鍵之值。
敲鍵本身一直保持由下次調(diào)用具的cmd值為0的bioskey所返回的值。
2返回當(dāng)前的鍵盤狀態(tài),由返回整數(shù)的每一個(gè)位表示,見(jiàn)下表:
┌──┬───────────┬───────────┐
│ 位│為0時(shí)意義 │為1時(shí)意義 │
├──┼───────────┼───────────┤
│ 7 │插入狀態(tài) │改寫狀態(tài) │
│ 6 │大寫狀態(tài) │小寫狀態(tài) │
│ 5 │數(shù)字狀態(tài),NumLock燈亮│光標(biāo)狀態(tài),NumLock燈熄│
│ 4 │ScrollLock燈亮 │ScrollLock燈熄 │
│ 3 │Alt按下 │Alt未按下 │
│ 2 │Ctrl按下 │Ctrl未按下 │
│ 1 │左Shift按下 │左Shift未按下 │
│ 0 │右Shift按下 │右Shift未按下 │
└──┴───────────┴───────────┘
int biosmemory()返回內(nèi)存大小,以K為單位.
int biosprint(int cmd,int byte,int port)控制打印機(jī)的輸入/輸出.
port為打印機(jī)號(hào),0為LPT1,1為LPT2,2為LPT3等
cmd可以為以下值:
0打印字符,將字符byte送到打印機(jī)
1打印機(jī)端口初始化
2讀打印機(jī)狀態(tài)
函數(shù)返回值由以下位值組成表示當(dāng)前打印機(jī)狀態(tài)
0x01設(shè)備時(shí)間超時(shí)
0x08輸入/輸出錯(cuò)誤
0x10選擇的
0x20走紙
0x40認(rèn)可
0x80不忙碌
int biostime(int cmd,long newtime)計(jì)時(shí)器控制,cmd為功能號(hào),可為以下值
0函數(shù)返回計(jì)時(shí)器的當(dāng)前值
1將計(jì)時(shí)器設(shè)為新值newtime
structcountry *country(int countrycmode,struct country *countryp)
本函數(shù)用來(lái)控制某一國(guó)家的相關(guān)信息,如日期,時(shí)間,貨幣等.
若countryp=-1時(shí),當(dāng)前的國(guó)家置為countrycode值(必須為非0).否則,由countryp
所指向的country結(jié)構(gòu)用下列的國(guó)家相關(guān)信息填充:
(1)當(dāng)前的國(guó)家(若countrycode為0或2)由countrycode所給定的國(guó)家.
結(jié)構(gòu)country定義如下:
┌────────────────────┐
│structcountry │
│{ │
│ int co_date; /*日期格式*/ │
│ charco_curr[5]; /*貨幣符號(hào)*/ │
│ charco_thsep[2]; /*數(shù)字分隔符*/ │
│ charco_desep[2]; /*小數(shù)點(diǎn)*/ │
│ charco_dtsep[2]; /*日期分隔符*/ │
│ charco_tmsep[2]; /*時(shí)間分隔符*/ │
│ charco_currstyle; /*貨幣形式*/ │
│ charco_digits; /*有效數(shù)字*/ │
│ int(far *co_case)(); /*事件處理函數(shù)*/│
│ charco_dasep; /*數(shù)據(jù)分隔符*/ │
│ charco_fill[10]; /*補(bǔ)充字符*/ │
│} │
└────────────────────┘
co_date的值所代表的日期格式是:
0月日年 1日月年 2年月日
co_currstrle的值所代表的貨幣顯示方式是
0貨幣符號(hào)在數(shù)值前,中間無(wú)空格
1貨幣符號(hào)在數(shù)值后,中間無(wú)空格
2貨幣符號(hào)在數(shù)值前,中間有空格
3貨幣符號(hào)在數(shù)值后,中間有空格
=============================================================================
操作函數(shù),所在函數(shù)庫(kù)為string.h、mem.h
mem…操作存貯數(shù)組
void*memccpy(void *destin,void *source,unsigned char ch,unsigned n)
void*memchr(void *s,char ch,unsigned n)
void*memcmp(void *s1,void *s2,unsigned n)
int memicmp(void *s1,void *s2,unsigned n)
void*memmove(void *destin,void *source,unsigned n)
void*memcpy(void *destin,void *source,unsigned n)
void*memset(void *s,char ch,unsigned n)
這些函數(shù),mem…系列的所有成員均操作存貯數(shù)組.在所有這些函數(shù)中,數(shù)組是n字節(jié)長(zhǎng).
memcpy從source復(fù)制一個(gè)n字節(jié)的塊到destin.如果源塊和目標(biāo)塊重迭,則選擇復(fù)制方向,
以例正確地復(fù)制覆蓋的字節(jié).
memmove與memcpy相同.
memset將s的所有字節(jié)置于字節(jié)ch中.s數(shù)組的長(zhǎng)度由n給出.
memcmp比較正好是n字節(jié)長(zhǎng)的兩個(gè)字符串s1和s2.些函數(shù)按無(wú)符號(hào)字符比較字節(jié),因此,
memcmp("0xFF","\x7F",1)返回值大于0.
memicmp比較s1和s2的前n個(gè)字節(jié),不管字符大寫或小寫.
memccpy從source復(fù)制字節(jié)到destin.復(fù)制一結(jié)束就發(fā)生下列任一情況:
(1)字符ch首選復(fù)制到destin.
(2)n個(gè)字節(jié)已復(fù)制到destin.
memchr對(duì)字符ch檢索s數(shù)組的前n個(gè)字節(jié).
返回值:memmove和memcpy返回destin
memset返回s的值
memcmp和memicmp─┬─若s1<s2返回值小于0
├─若s1=s2返回值等于0
└─若s1>s2返回值大于0
memccpy若復(fù)制了ch,則返回直接跟隨ch的在destin中的字節(jié)的一個(gè)指針;
否則返回NULL
memchr返回在s中首先出現(xiàn)ch的一個(gè)指針;如果在s數(shù)組中不出現(xiàn)ch,就返回NULL.
void movedata(int segsrc,int offsrc,
intsegdest,int offdest,
unsignednumbytes)
本函數(shù)將源地址(segsrc:offsrc)處的numbytes個(gè)字節(jié)
復(fù)制到目標(biāo)地址(segdest:offdest)
void movemem(void *source,void *destin,unsigned len)
本函數(shù)從source處復(fù)制一塊長(zhǎng)len字節(jié)的數(shù)據(jù)到destin.若源地址和目標(biāo)地址字符串
重迭,則選擇復(fù)制方向,以便正確的復(fù)制數(shù)據(jù).
void setmem(void *addr,int len,char value)
本函數(shù)把addr所指的塊的第一個(gè)字節(jié)置于字節(jié)value中.
str…字符串操作函數(shù)
char stpcpy(char *dest,const char *src)
將字符串src復(fù)制到dest
char strcat(char *dest,const char *src)
將字符串src添加到dest末尾
char strchr(const char *s,int c)
檢索并返回字符c在字符串s中第一次出現(xiàn)的位置
int strcmp(const char *s1,const char *s2)
比較字符串s1與s2的大小,并返回s1-s2
char strcpy(char *dest,const char *src)
將字符串src復(fù)制到dest
size_tstrcspn(const char *s1,const char *s2)
掃描s1,返回在s1中有,在s2中也有的字符個(gè)數(shù)
char strdup(const char *s)
將字符串s復(fù)制到最近建立的單元
int stricmp(const char *s1,const char *s2)
比較字符串s1和s2,并返回s1-s2
size_tstrlen(const char *s)
返回字符串s的長(zhǎng)度
char strlwr(char *s)
將字符串s中的大寫字母全部轉(zhuǎn)換成小寫字母,并返回轉(zhuǎn)換后的字符串
char strncat(char *dest,const char *src,size_t maxlen)
將字符串src中最多maxlen個(gè)字符復(fù)制到字符串dest中
int strncmp(const char *s1,const char *s2,size_t maxlen)
比較字符串s1與s2中的前maxlen個(gè)字符
char strncpy(char *dest,const char *src,size_t maxlen)
復(fù)制src中的前maxlen個(gè)字符到dest中
int strnicmp(const char *s1,const char *s2,size_t maxlen)
比較字符串s1與s2中的前maxlen個(gè)字符
char strnset(char *s,int ch,size_t n)
將字符串s的前n個(gè)字符置于ch中
char strpbrk(const char *s1,const char *s2)
掃描字符串s1,并返回在s1和s2中均有的字符個(gè)數(shù)
char strrchr(const char *s,int c)
掃描最后出現(xiàn)一個(gè)給定字符c的一個(gè)字符串s
char strrev(char *s)
將字符串s中的字符全部顛倒順序重新排列,并返回排列后的字符串
char strset(char *s,int ch)
將一個(gè)字符串s中的所有字符置于一個(gè)給定的字符ch
size_tstrspn(const char *s1,const char *s2)
掃描字符串s1,并返回在s1和s2中均有的字符個(gè)數(shù)
char strstr(const char *s1,const char *s2)
掃描字符串s2,并返回第一次出現(xiàn)s1的位置
char strtok(char *s1,const char *s2)
檢索字符串s1,該字符串s1是由字符串s2中定義的定界符所分隔
char strupr(char *s)
將字符串s中的小寫字母全部轉(zhuǎn)換成大寫字母,并返回轉(zhuǎn)換后的字符串
==================================================================================
存貯分配子程序,所在函數(shù)庫(kù)為dos.h、alloc.h、malloc.h、stdlib.h、process.h
int allocmem(unsigned size,unsigned *seg)利用DOS分配空閑的內(nèi)存,
size為分配內(nèi)存大小,seg為分配后的內(nèi)存指針
int freemem(unsigned seg)釋放先前由allocmem分配的內(nèi)存,seg為指定的內(nèi)存指針
int setblock(int seg,int newsize)本函數(shù)用來(lái)修改所分配的內(nèi)存長(zhǎng)度,
seg為已分配內(nèi)存的內(nèi)存指針,newsize為新的長(zhǎng)度
int brk(void *endds)
本函數(shù)用來(lái)改變分配給調(diào)用程序的數(shù)據(jù)段的空間數(shù)量,新的空間結(jié)束地址為endds
char *sbrk(int incr)
本函數(shù)用來(lái)增加分配給調(diào)用程序的數(shù)據(jù)段的空間數(shù)量,增加incr個(gè)字節(jié)的空間
unsignedlong coreleft() 本函數(shù)返回未用的存儲(chǔ)區(qū)的長(zhǎng)度,以字節(jié)為單位
void *calloc(unsigned nelem,unsigned elsize)分配nelem個(gè)長(zhǎng)度為elsize的內(nèi)存空間
并返回所分配內(nèi)存的指針
void *malloc(unsigned size)分配size個(gè)字節(jié)的內(nèi)存空間,并返回所分配內(nèi)存的指針
void free(void *ptr)釋放先前所分配的內(nèi)存,所要釋放的內(nèi)存的指針為ptr
void *realloc(void *ptr,unsigned newsize)改變已分配內(nèi)存的大小,ptr為已分配有內(nèi)
存區(qū)域的指針,newsize為新的長(zhǎng)度,返回分配好的內(nèi)存指針.
long farcoreleft() 本函數(shù)返回遠(yuǎn)堆中未用的存儲(chǔ)區(qū)的長(zhǎng)度,以字節(jié)為單位
voidfar *farcalloc(unsigned long units,unsigned long unitsz)
從遠(yuǎn)堆分配units個(gè)長(zhǎng)度為unitsz的內(nèi)存空間,并返回所分配內(nèi)存的指針
void *farmalloc(unsigned long size)分配size個(gè)字節(jié)的內(nèi)存空間,
并返回分配的內(nèi)存指針
void farfree(void far *block)釋放先前從遠(yuǎn)堆分配的內(nèi)存空間,
所要釋放的遠(yuǎn)堆內(nèi)存的指針為block
voidfar *farrealloc(void far *block,unsigned long newsize)改變已分配的遠(yuǎn)堆內(nèi)
存的大小,block為已分配有內(nèi)存區(qū)域的指針,newzie為新的長(zhǎng)度,返回分配好
的內(nèi)存指針
時(shí)間日期函數(shù),函數(shù)庫(kù)為time.h、dos.h
在時(shí)間日期函數(shù)里,主要用到的結(jié)構(gòu)有以下幾個(gè):
總時(shí)間日期貯存結(jié)構(gòu)tm
┌──────────────────────┐
│structtm │
│{ │
│ inttm_sec; /*秒,0-59*/ │
│ inttm_min; /*分,0-59*/ │
│ inttm_hour; /*時(shí),0-23*/ │
│ inttm_mday; /*天數(shù),1-31*/ │
│ inttm_mon; /*月數(shù),0-11*/ │
│ inttm_year; /*自1900的年數(shù)*/ │
│ inttm_wday; /*自星期日的天數(shù)0-6*/ │
│ inttm_yday; /*自1月1日起的天數(shù),0-365*/ │
│ inttm_isdst; /*是否采用夏時(shí)制,采用為正數(shù)*/│
│} │
└──────────────────────┘
日期貯存結(jié)構(gòu)date
┌───────────────┐
│structdate │
│{ │
│ intda_year; /*自1900的年數(shù)*/│
│ charda_day; /*天數(shù)*/ │
│ charda_mon; /*月數(shù)1=Jan*/ │
│} │
└───────────────┘
時(shí)間貯存結(jié)構(gòu)time
┌────────────────┐
│structtime │
│{ │
│ unsignedchar ti_min; /*分鐘*/│
│ unsignedchar ti_hour; /*小時(shí)*/│
│ unsignedchar ti_hund; │
│ unsignedchar ti_sec; /*秒*/ │
│ │
└────────────────┘
char *ctime(long *clock)
本函數(shù)把clock所指的時(shí)間(如由函數(shù)time返回的時(shí)間)轉(zhuǎn)換成下列格式的
字符串:MonNov 21 11:31:54 1983\n\0
char *asctime(struct tm *tm)
本函數(shù)把指定的tm結(jié)構(gòu)類的時(shí)間轉(zhuǎn)換成下列格式的字符串:
MonNov 21 11:31:54 1983\n\0
double difftime(time_t time2,time_t time1)
計(jì)算結(jié)構(gòu)time2和time1之間的時(shí)間差距(以秒為單位)
structtm *gmtime(long *clock)本函數(shù)把clock所指的時(shí)間(如由函數(shù)time返回的時(shí)間)
轉(zhuǎn)換成格林威治時(shí)間,并以tm結(jié)構(gòu)形式返回
structtm *localtime(long *clock)本函數(shù)把clock所指的時(shí)間(如函數(shù)time返回的時(shí)間)
轉(zhuǎn)換成當(dāng)?shù)貥?biāo)準(zhǔn)時(shí)間,并以tm結(jié)構(gòu)形式返回
void tzset()本函數(shù)提供了對(duì)UNIX操作系統(tǒng)的兼容性
long dostounix(struct date *dateptr,struct time *timeptr)
本函數(shù)將dateptr所指的日期,timeptr所指的時(shí)間轉(zhuǎn)換成UNIX格式,并返回
自格林威治時(shí)間1970年1月1日凌晨起到現(xiàn)在的秒數(shù)
void unixtodos(long utime,struct date *dateptr,struct time *timeptr)
本函數(shù)將自格林威治時(shí)間1970年1月1日凌晨起到現(xiàn)在的秒數(shù)utime轉(zhuǎn)換成
DOS格式并保存于用戶所指的結(jié)構(gòu)dateptr和timeptr中
void getdate(struct date *dateblk)本函數(shù)將計(jì)算機(jī)內(nèi)的日期寫入結(jié)構(gòu)dateblk
中以供用戶使用
void setdate(struct date *dateblk)本函數(shù)將計(jì)算機(jī)內(nèi)的日期改成
由結(jié)構(gòu)dateblk所指定的日期
void gettime(struct time *timep)本函數(shù)將計(jì)算機(jī)內(nèi)的時(shí)間寫入結(jié)構(gòu)timep中,
以供用戶使用
void settime(struct time *timep)本函數(shù)將計(jì)算機(jī)內(nèi)的時(shí)間改為
由結(jié)構(gòu)timep所指的時(shí)間
long time(long *tloc)本函數(shù)給出自格林威治時(shí)間1970年1月1日凌晨至現(xiàn)在所經(jīng)
過(guò)的秒數(shù),并將該值存于tloc所指的單元中.
int stime(long *tp)本函數(shù)將tp所指的時(shí)間(例如由time所返回的時(shí)間)
寫入計(jì)算機(jī)中.
總結(jié)
- 上一篇: 决策树算法学习笔记(提升篇)
- 下一篇: 卷积神经网络CNN(4)—— SegNe