C語言函式

ct(in in in

分類函式

所在函式館為【ctype.h】
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數字('0'-'9')
返回非0值,否則返回0
int isascii(int ch) 若ch是字元(ASCII碼中的0-127)返回非0值,否則返回0
int iscntrl(int ch) 若ch是作廢字元(0x7F)或普通控制字元(0x00-0x1F)
返回非0值,否則返回0
int isdigit(int ch) 若ch是數字('0'-'9')返回非0值,否則返回0
int isgraph(int ch) 若ch是可列印字元(不含空格)(0x21-0x7E)返回非0值,否則返回0
int islower(int ch) 若ch是小寫字母('a'-'z')返回非0值,否則返回0
int isprint(int ch) 若ch是可列印字元(含空格)(0x20-0x7E)返回非0值,否則返回0
int ispunct(int ch) 若ch是標點字元(0x00-0x1F)返回非0值,否則返回0
int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回車符('\r'),
走紙換行('\f'),垂直制表符('\v'),換行符('\n')
返回非0值,否則返回0
int isupper(int ch) 若ch是大寫字母('A'-'Z')返回非0值,否則返回0
int isxdigit(int ch) 若ch是16進制數('0'-'9','A'-'F','a'-'f')返回非0值,
否則返回0
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')

數學函式

所在函式館為math.hstdlib.hstring.hfloat.h
int abs(int i) 返回整型參數i的絕對值
double cabs(struct complex znum) 返回複數znum的絕對值
double fabs(double x) 返回雙精度參數x的絕對值
long labs(long n) 返回長整型參數n的絕對值
double exp(double x) 返回指數函式ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中
double ldexp(double value,int exp); 返回value*2exp的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
double pow10(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為弧度
double atan2(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為弧度
double hypot(double x,double y) 返回直角三角形斜邊的長度(z),
x和y為直角邊的長度,z2=x2+y2
double ceil(double x) 返回不小於x的最小整數
double floor(double x) 返回不大於x的最大整數
void srand(unsigned seed) 初始化隨機數發生器
int rand() 產生一個隨機數並返回這個數
double poly(double x,int n,double c[])從參數產生一個多項式
double modf(double value,double *iptr)將雙精度數value分解成尾數和階
double fmod(double x,double y) 返回x/y的餘數
double frexp(double value,int *eptr) 將雙精度數value分成尾數和階
double atof(char *nptr) 將字元串nptr轉換成浮點數並返回這個浮點數
double atoi(char *nptr) 將字元串nptr轉換成整數並返回這個整數
double atol(char *nptr) 將字元串nptr轉換成長整數並返回這個整數
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *gcvt(double value,int ndigit,char *buf)
將數value轉換成字元串並存於buf中,並返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *ltoa(long value,char *string,int radix)
將長整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *itoa(int value,char *string,int radix)
將整數value轉換成字元串存入string,radix為轉換時所用基數
double atof(char *nptr) 將字元串nptr轉換成雙精度數,並返回這個數,錯誤返回0
int atoi(char *nptr) 將字元串nptr轉換成整型數, 並返回這個數,錯誤返回0
long atol(char *nptr) 將字元串nptr轉換成長整型數,並返回這個數,錯誤返回0
double strtod(char *str,char **endptr)將字元串str轉換成雙精度數,並返回這個數,
long strtol(char *str,char **endptr,int base)將字元串str轉換成長整型數,
並返回這個數,
int matherr(struct exception *e)
用戶修改數學錯誤返回信息函式(沒有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用戶修改數學錯誤返回信息函式(沒有必要使用)
unsigned int _clear87() 清除浮點狀態字並返回原來的浮點狀態
void _fpreset() 重新初使化浮點數學程式包
unsigned int _status87() 返回浮點狀態字

目錄函式

所在函式館為dir.hdos.h
int chdir(char *path) 使指定的目錄path(如:"C:\\WPS")變成當前的工作目錄,成
功返回0
int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的檔案,成功
返回0
pathname為指定的目錄名和檔案名稱,如"C:\\WPS\\TXT"
ffblk為指定的保存檔案信息的一個結構,定義如下:
┏━━━━━━━━━━━━━━━━━━┓
┃struct ffblk ┃
┃{ ┃
┃ char ff_reserved[21]; /*dos保留字*/┃
┃ char ff_attrib; /*檔案屬性*/ ┃
┃ int ff_ftime; /*檔案時間*/ ┃
┃ int ff_fdate; /*檔案日期*/ ┃
┃ long ff_fsize; /*檔案長度*/ ┃
┃ char ff_name[13]; /*檔案名稱*/ ┃
┃} ┃
┗━━━━━━━━━━━━━━━━━━┛
attrib為檔案屬性,由以下字元代表
┏━━━━━━━━━┳━━━━━━━━┓
┃FA_RDONLY 唯讀檔案┃FA_LABEL 卷標號┃
┃FA_HIDDEN 隱藏檔案┃FA_DIREC 目錄 ┃
┃FA_SYSTEM 系統檔案┃FA_ARCH 檔案 ┃
┗━━━━━━━━━┻━━━━━━━━┛
例:
struct ffblk 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)
此函式通過盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
檔案名稱name(TC、WPS等),擴展名ext(.EXE、.COM等)組成一個檔案名稱
存與path中.
int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)
此函式將檔案名稱path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
檔案名稱name(TC、WPS等),擴展名ext(.EXE、.COM等),並分別存入相應的變數中.
int getcurdir(int drive,char *direc) 此函式返回指定驅動器的當前工作目錄名稱
drive 指定的驅動器(0=當前,1=A,2=B,3=C等)
direc 保存指定驅動器當前工作路徑的變數 成功返回0
char *getcwd(char *buf,iint n) 此函式取當前工作目錄並存入buf中,直到n個字
節長為為止.錯誤返回NULL
int getdisk() 取當前正在使用的驅動器,返回一個整數(0=A,1=B,2=C等)
int setdisk(int drive) 設定要使用的驅動器drive(0=A,1=B,2=C等),
返回可使用驅動器總數
int mkdir(char *pathname) 建立一個新的目錄pathname,成功返回0
int rmdir(char *pathname) 刪除一個目錄pathname,成功返回0
char *mktemp(char *template) 構造一個當前目錄上沒有的檔案名稱並存於template中
char *SearchPath(char *pathname) 利用MSDOS找出檔案filename所在路徑,
,此函式使用DOS的PATH變數,未找到檔案返回NULL

進程函式

所在函式館為stdlib.hprocess.h
void abort() 此函式通過調用具有出口代碼3的_exit寫一個終止信息於
stderr,並異常終止程式 無返回值
int exec…裝入和運行其它程式
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函式族裝入並運行程式pathname,並將參數
arg0(arg1,arg2,argv[],envp[])傳遞給子程式,出錯返回-1
在exec函式族中,後綴l、v、p、e添加到exec後,
所指定的函式將具有某種操作能力
有後綴 p時,函式可以利用DOS的PATH變數查找子程式檔案
l時,函式中被傳遞的參數個數固定
v時,函式中被傳遞的參數個數不固定
e時,函式傳遞指定參數envp,允許改變子進程的環境,
無後綴e時,子進程使用當前程式的環境
void _exit(int status)終止當前程式,但不清理現場
void exit(int status) 終止當前程式,關閉所有檔案,寫緩衝區的輸出(等待輸出),
並調用任何暫存器的"出口函式",無返回值
int spawn…運行子程式
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函式族在mode模式下運行子程式pathname,並將參數
arg0(arg1,arg2,argv[],envp[])傳遞給子程式.出錯返回-1
mode為運行模式
mode為 P_WAIT 表示在子程式運行完後返回本程式
P_NOWAIT 表示在子程式運行時同時運行本程式(不可用)
P_OVERLAY表示在本程式退出後運行子程式
在spawn函式族中,後綴l、v、p、e添加到spawn後,
所指定的函式將具有某種操作能力
有後綴 p時, 函式利用DOS的PATH查找子程式檔案
l時, 函式傳遞的參數個數固定.
v時, 函式傳遞的參數個數不固定.
e時, 指定參數envp可以傳遞給子程式,允許改變子程式運行環境.
當無後綴e時,子程式使用本程式的環境.
int system(char *command) 將MSDOS命令command傳遞給DOS執行
轉換子程式,函式館為math.h、stdlib.h、ctype.h、float.h
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *gcvt(double value,int ndigit,char *buf)
將數value轉換成字元串並存於buf中,並返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *ltoa(long value,char *string,int radix)
將長整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *itoa(int value,char *string,int radix)
將整數value轉換成字元串存入string,radix為轉換時所用基數
double atof(char *nptr) 將字元串nptr轉換成雙精度數,並返回這個數,錯誤返回0
int atoi(char *nptr) 將字元串nptr轉換成整型數, 並返回這個數,錯誤返回0
long atol(char *nptr) 將字元串nptr轉換成長整型數,並返回這個數,錯誤返回0
double strtod(char *str,char **endptr)將字元串str轉換成雙精度數,並返回這個數,
long strtol(char *str,char **endptr,int base)將字元串str轉換成長整型數,
並返回這個數,
int ToAscii(int c) 返回c相應的ASCII
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')
int _tolower(int ch) 返回ch相應的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')
int _toupper(int ch) 返回ch相應的大寫字母('A'-'Z')

診斷函式

所在函式館為assert.hmath.h
void assert(int test) 一個擴展成if語句那樣的宏,如果test測試失敗,
就顯示一個信息並異常終止程式,無返回值
void perror(char *string) 本函式將顯示最近一次的錯誤信息,格式如下:
字元串string:錯誤信息
char *strerror(char *str) 本函式返回最近一次的錯誤信息,格式如下:
字元串str:錯誤信息
int matherr(struct exception *e)
用戶修改數學錯誤返回信息函式(沒有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用戶修改數學錯誤返回信息函式(沒有必要使用) 輸入輸出子程式,函式館為io.h、conio.h、stat.h、dos.h、stdio.h、signal.h
int kbhit() 本函式返回最近所敲的按鍵
int fgetchar() 從控制台(鍵盤)讀一個字元,顯示在螢幕上
int getch() 從控制台(鍵盤)讀一個字元,不顯示在螢幕上
int putch() 向控制台(鍵盤)寫一個字元
int getchar() 從控制台(鍵盤)讀一個字元,顯示在螢幕上
int putchar() 向控制台(鍵盤)寫一個字元
int getche() 從控制台(鍵盤)讀一個字元,顯示在螢幕上
int ungetch(int c) 把字元c退回給控制台(鍵盤)
char *cgets(char *string) 從控制台(鍵盤)讀入字元串存於string中
int scanf(char *format[,argument…])從控制台讀入一個字元串,分別對各個參數進行
賦值,使用BIOS進行輸出
int vscanf(char *format,Valist param)從控制台讀入一個字元串,分別對各個參數進行
賦值,使用BIOS進行輸出,參數從Valist param中取得
int cscanf(char *format[,argument…])從控制台讀入一個字元串,分別對各個參數進行
賦值,直接對控制台作操作,比如顯示器在顯示時字元時即為直接寫頻方式顯示
int sscanf(char *string,char *format[,argument,…])通過字元串string,分別對各個
參數進行賦值
int vsscanf(char *string,char *format,Vlist param)通過字元串string,分別對各個
參數進行賦值,參數從Vlist param中取得
int puts(char *string) 發關一個字元串string給控制台(顯示器),
使用BIOS進行輸出
void cputs(char *string) 傳送一個字元串string給控制台(顯示器),
直接對控制台作操作,比如顯示器即為直接寫頻方式顯示
int printf(char *format[,argument,…]) 傳送格式化字元串輸出給控制台(顯示器)
使用BIOS進行輸出
int vprintf(char *format,Valist param) 傳送格式化字元串輸出給控制台(顯示器)
使用BIOS進行輸出,參數從Valist param中取得
int cprintf(char *format[,argument,…]) 傳送格式化字元串輸出給控制台(顯示器),
直接對控制台作操作,比如顯示器即為直接寫頻方式顯示
int vcprintf(char *format,Valist param)傳送格式化字元串輸出給控制台(顯示器),
直接對控制台作操作,比如顯示器即為直接寫頻方式顯示,
參數從Valist param中取得
int sprintf(char *string,char *format[,argument,…])
將字元串string的內容重新寫為格式化後的字元串
int vsprintf(char *string,char *format,Valist param)
將字元串string的內容重新寫為格式化後的字元串,參數從Valist param中取得
int rename(char *oldname,char *newname)將檔案oldname的名稱改為newname
int ioctl(int handle,int cmd[,int *argdx,int argcx])
本函式是用來控制輸入/輸出設備的,請見下表:
┌───┬────────────────────────────┐
│cmd值 │功能 │
├───┼────────────────────────────┤
│ 0 │取出設備信息 │
│ 1 │設定設備信息 │
│ 2 │把argcx位元組讀入由argdx所指的地址 │
│ 3 │在argdx所指的地址寫argcx位元組 │
│ 4 │除把handle當作設備號(0=當前,1=A,等)之外,均和cmd=2時一樣 │
│ 5 │除把handle當作設備號(0=當前,1=A,等)之外,均和cmd=3時一樣 │
│ 6 │取輸入狀態 │
│ 7 │取輸出狀態 │
│ 8 │測試可換性;只對於DOS 3.x │
│ 11 │置分享衝突的重算計數;只對DOS 3.x │
└───┴────────────────────────────┘
int (*ssignal(int sig,int(*action)())()執行軟體信號(沒必要使用)
int gsignal(int sig) 執行軟體信號(沒必要使用)
int _open(char *pathname,int access)為讀或寫打開一個檔案,
按後按access來確定是讀檔案還是寫檔案,access值見下表
┌──────┬────────────────────┐
│access值 │意義 │
├──────┼────────────────────┤
│O_RDONLY │讀檔案 │
│O_WRONLY │寫檔案 │
│O_RDWR │即讀也寫 │
│O_NOINHERIT │若檔案沒有傳遞給子程式,則被包含 │
│O_DENYALL │只允許當前處理必須存取的檔案 │
│O_DENYWRITE │只允許從任何其它打開的檔案讀 │
│O_DENYREAD │只允許從任何其它打開的檔案寫 │
│O_DENYNONE │允許其它共享打開的檔案 │
└──────┴────────────────────┘

接口子程式

所在函式館為:dos.hbios.h
unsigned sleep(unsigned seconds)暫停seconds微秒(百分之一秒)
int unlink(char *filename)刪除檔案filename
unsigned FP_OFF(void far *farptr)本函式用來取遠指針farptr的偏移量
unsigned FP_SEG(void far *farptr)本函式用來沒置遠指針farptr的段值
void far *MK_FP(unsigned seg,unsigned off)根據段seg和偏移量off構造一個far指針
unsigned getpsp()取程式段前綴的段地址,並返回這個地址
char *parsfnm(char *cmdline,struct fcb *fcbptr,int option)
函式分析一個字元串,通常,對一個檔案名稱來說,是由cmdline所指的一個命令行.
檔案名稱是放入一個FCB中作為一個驅動器,檔案名稱和擴展名.FCB是由fcbptr所指
定的.option參數是DOS分析系統調用時,AL文本的值.
int absread(int drive,int nsects,int sectno,void *buffer)本函式功能為讀特定的
磁碟扇區,drive為驅動器號(0=A,1=B等),nsects為要讀的扇區數,sectno為開始的邏
輯扇區號,buffer為保存所讀數據的保存空間
int abswrite(int drive,int nsects,int sectno,void *buffer)本函式功能為寫特定的
磁碟扇區,drive為驅動器號(0=A,1=B等),nsects為要寫的扇區數,sectno為開始的邏
輯扇區號,buffer為保存所寫數據的所在空間
void getdfree(int drive,struct dfree *dfreep)本函式用來取磁碟的自由空間,
drive為磁碟號(0=當前,1=A等).函式將磁碟特性的由dfreep指向的dfree結構中.
dfree結構如下:
┌───────────────────┐
│struct dfree │
│{ │
│ unsigned df_avail; /*有用簇個數*/ │
│ unsigned df_total; /*總共簇個數*/ │
│ unsigned df_bsec; /*每個扇區位元組數*/│
│ unsigned df_sclus; /*每個簇扇區數*/ │
│} │
└───────────────────┘
char far *getdta() 取磁碟轉換地址DTA
void setdta(char far *dta)設定磁碟轉換地址DTA
void getfat(int drive,fatinfo *fatblkp)
本函式返回指定驅動器drive(0=當前,1=A,2=B等)的檔案分配表信息
並存入結構fatblkp中,結構如下:
┌──────────────────┐
│struct fatinfo │
│{ │
│ char fi_sclus; /*每個簇扇區數*/ │
│ char fi_fatid; /*檔案分配表位元組數*/│
│ int fi_nclus; /*簇的數目*/ │
│ int fi_bysec; /*每個扇區位元組數*/ │
│} │
└──────────────────┘
void getfatd(struct fatinfo *fatblkp) 本函式返回當前驅動器的檔案分配表信息,
並存入結構fatblkp中,結構如下:
┌──────────────────┐
│struct fatinfo │
│{ │
│ char fi_sclus; /*每個簇扇區數*/ │
│ char fi_fatid; /*檔案分配表位元組數*/│
│ int fi_nclus; /*簇的數目*/ │
│ int fi_bysec; /*每個扇區位元組數*/ │
│} │
└──────────────────┘
int bdos(int dosfun,unsigned dosdx,unsigned dosal)本函式對MSDOS系統進行調用,
dosdx為暫存器dx的值,dosal為暫存器al的值,dosfun為功能號
int bdosptr(int dosfun,void *argument,unsiigned dosal)本函式對MSDOS系統進行調用,
argument為暫存器dx的值,dosal為暫存器al的值,dosfun為功能號
int int86(int intr_num,union REGS *inregs,union REGS *outregs)
執行intr_num號中斷,用戶定義的暫存器值存於結構inregs中,
執行完後將返回的暫存器值存於結構outregs中.
int int86x(int intr_num,union REGS *inregs,union REGS *outregs,
struct SREGS *segregs)執行intr_num號中斷,用戶定義的暫存器值存於
結構inregs中和結構segregs中,執行完後將返回的暫存器值存於結構outregs中.
int intdos(union REGS *inregs,union REGS *outregs)
本函式執行DOS中斷0x21來調用一個指定的DOS函式,用戶定義的暫存器值
存於結構inregs中,執行完後函式將返回的暫存器值存於結構outregs中
int intdosx(union REGS *inregs,union REGS *outregs,struct SREGS *segregs)
本函式執行DOS中斷0x21來調用一個指定的DOS函式,用戶定義的暫存器值
存於結構inregs和segregs中,執行完後函式將返回的暫存器值存於結構outregs中
void intr(int intr_num,struct REGPACK *preg)本函式中一個備用的8086軟體中斷接口
它能產生一個由參數intr_num指定的8086軟體中斷.函式在執行軟體中斷前,
從結構preg複製用戶定義的各暫存器值到各個暫存器.軟體中斷完成後,
函式將當前各個暫存器的值複製到結構preg中.參數如下:
intr_num 被執行的中斷號
preg為保存用戶定義的暫存器值的結構,結構如下
┌──────────────────────┐
│struct REGPACK │
│{ │
│ unsigned r_ax,r_bx,r_cx,r_dx; │
│ unsigned r_bp,r_si,r_di,r_ds,r_es,r_flags; │
│} │
└──────────────────────┘
函式執行完後,將新的暫存器值存於結構preg中
void keep(int status,int size)以status狀態返回MSDOS,但程式仍保留於記憶體中,所占
用空間由size決定.
void ctrlbrk(int (*fptr)()) 設定中斷後的對中斷的處理程式.
void disable() 禁止發生中斷
void enable() 允許發生中斷
void geninterrupt(int intr_num)執行由intr_num所指定的軟體中斷
void interrupt(* getvect(int intr_num))() 返回中斷號為intr_num的中斷處理程式,
例如: old_int_10h=getvect(0x10);
void setvect(int intr_num,void interrupt(* isr)()) 設定中斷號為intr_num的中
斷處理程式為isr,例如: setvect(0x10,new_int_10h);
void harderr(int (*fptr)()) 定義一個硬體錯誤處理程式,
每當出現錯誤時就調用fptr所指的程式
void hardresume(int rescode)硬體錯誤處理函式
void hardretn(int errcode) 硬體錯誤處理函式
int inport(int prot) 從指定的輸入連線埠讀入一個字,並返回這個字
int inportb(int port)從指定的輸入連線埠讀入一個位元組,並返回這個位元組
void outport(int port,int word) 將字word寫入指定的輸出連線埠port
void outportb(int port,char byte)將位元組byte寫入指定的輸出連線埠port
int peek(int segment,unsigned offset) 函式返回segment:offset處的一個字
char peekb(int segment,unsigned offset)函式返回segment:offset處的一個位元組
void poke(int segment,int offset,char value) 將字value寫到segment:offset處
void pokeb(int segment,int offset,int value) 將位元組value寫到segment:offset處
int randbrd(struct fcb *fcbptr,int reccnt)
函式利用打開fcbptr所指的FCB讀reccnt個記錄.
int randbwr(struct fcb *fcbptr,int reccnt)
函式將fcbptr所指的FCB中的reccnt個記錄寫到磁碟上
void segread(struct SREGS *segtbl)函式把段暫存器的當前值放進結構segtbl中
int getverify() 取檢驗標誌的當前狀態(0=檢驗關閉,1=檢驗打開)
void setverify(int value)設定當前檢驗狀態,
value為0表示關閉檢驗,為1表示打開檢驗
int getcbrk()本函式返回控制中斷檢測的當前設定
int setcbrk(int value)本函式用來設定控制中斷檢測為接通或斷開
當value=0時,為斷開檢測.當value=1時,為接開檢測
int dosexterr(struct DOSERR *eblkp)取擴展錯誤.在DOS出現錯誤後,此函式將擴充的
錯誤信息填入eblkp所指的DOSERR結構中.該結構定義如下:
┌──────────────┐
│struct DOSERR │
│{ │
│ int exterror;/*擴展錯誤*/ │
│ char class; /*錯誤類型*/ │
│ char action; /*方式*/ │
│ char locus; /*錯誤場所*/ │
│} │
└──────────────┘

操作函式

所在函式館為string.hmem.h
mem…操作存貯數組
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)
這些函式,mem…系列的所有成員均操作存貯數組.在所有這些函式中,數組是n位元組長.
memcpy從source複製一個n位元組的塊到destin.如果源塊和目標塊重疊,則選擇複製方向,
以例正確地複製覆蓋的位元組.
memmove與memcpy相同.
memset將s的所有位元組置於位元組ch中.s數組的長度由n給出.
memcmp比較正好是n位元組長的兩個字元串s1和s2.些函式按無符號字元比較位元組,因此,
memcmp("0xFF","\x7F",1)返回值大於0.
memicmp比較s1和s2的前n個位元組,不管字元大寫或小寫.
memccpy從source複製位元組到destin.複製一結束就發生下列任一情況:
(1)字元ch首選複製到destin.
(2)n個位元組已複製到destin.
memchr對字元ch檢索s數組的前n個位元組.
返回值:memmove和memcpy返回destin
memset返回s的值
memcmp和memicmp─┬─若s1<s2返回值小於0
├─若s1=s2返回值等於0
└─若s1>s2返回值大於0
memccpy若複製了ch,則返回直接跟隨ch的在destin中的位元組的一個指針;
否則返回NULL
memchr返回在s中首先出現ch的一個指針;如果在s數組中不出現ch,就返回NULL.
void movedata(int segsrc,int offsrc,
int segdest,int offdest,
unsigned numbytes)
本函式將源地址(segsrc:offsrc)處的numbytes個位元組
複製到目標地址(segdest:offdest)
void movemem(void *source,void *destin,unsigned len)
本函式從source處複製一塊長len位元組的數據到destin.若源地址和目標地址字元串
重疊,則選擇複製方向,以便正確的複製數據.
void setmem(void *addr,int len,char value)
本函式把addr所指的塊的第一個位元組置於位元組value中.
str…字元串操作函式
char stpcpy(char *dest,const char *src)
將字元串src複製到dest
char strcat(char *dest,const char *src)
將字元串src添加到dest末尾
char strchr(const char *s,int c)
檢索並返回字元c在字元串s中第一次出現的位置
int strcmp(const char *s1,const char *s2)
比較字元串s1與s2的大小,並返回s1-s2
char strcpy(char *dest,const char *src)
將字元串src複製到dest
size_t strcspn(const char *s1,const char *s2)
掃描s1,返回在s1中有,在s2中也有的字元個數
char strdup(const char *s)
將字元串s複製到最近建立的單元
int stricmp(const char *s1,const char *s2)
比較字元串s1和s2,並返回s1-s2
size_t strlen(const char *s)
返回字元串s的長度
char strlwr(char *s)
將字元串s中的大寫字母全部轉換成小寫字母,並返迴轉換後的字元串
char strncat(char *dest,const char *src,size_t maxlen)
將字元串src中最多maxlen個字元複製到字元串dest中
int strncmp(const char *s1,const char *s2,size_t maxlen)
比較字元串s1與s2中的前maxlen個字元
char strncpy(char *dest,const char *src,size_t maxlen)
複製src中的前maxlen個字元到dest中
int strnicmp(const char *s1,const char *s2,size_t maxlen)
比較字元串s1與s2中的前maxlen個字元
char strnset(char *s,int ch,size_t n)
將字元串s的前n個字元置於ch中
char strpbrk(const char *s1,const char *s2)
掃描字元串s1,並返回在s1和s2中均有的字元個數
char strrchr(const char *s,int c)
掃描最後出現一個給定字元c的一個字元串s
char strrev(char *s)
將字元串s中的字元全部顛倒順序重新排列,並返回排列後的字元串
char strset(char *s,int ch)
將一個字元串s中的所有字元置於一個給定的字元ch
size_t strspn(const char *s1,const char *s2)
掃描字元串s1,並返回在s1和s2中均有的字元個數
char strstr(const char *s1,const char *s2)
掃描字元串s2,並返回第一次出現s1的位置
char strtok(char *s1,const char *s2)
檢索字元串s1,該字元串s1是由字元串s2中定義的定界符所分隔
char strupr(char *s)
將字元串s中的小寫字母全部轉換成大寫字母,並返迴轉換後的字元串
存貯分配子程式,所在函式館為dos.h、alloc.h、malloc.h、stdlib.h、process.h
int allocmem(unsigned size,unsigned *seg)利用DOS分配空閒的記憶體,
size為分配記憶體大小,seg為分配後的記憶體指針
int Freemem(unsigned seg)釋放先前由allocmem分配的記憶體,seg為指定的記憶體指針
int setblock(int seg,int newsize)本函式用來修改所分配的記憶體長度,
seg為已分配記憶體的記憶體指針,newsize為新的長度
int brk(void *endds)
本函式用來改變分配給調用程式的數據段的空間數量,新的空間結束地址為endds
char *sbrk(int incr)
本函式用來增加分配給調用程式的數據段的空間數量,增加incr個位元組的空間
unsigned long coreleft() 本函式返回未用的存儲區的長度,以位元組為單位
void *calloc(unsigned nelem,unsigned elsize)分配nelem個長度為elsize的記憶體空間
並返回所分配記憶體的指針
void *malloc(unsigned size)分配size個位元組的記憶體空間,並返回所分配記憶體的指針
void free(void *ptr)釋放先前所分配的記憶體,所要釋放的記憶體的指針為ptr
void *realloc(void *ptr,unsigned newsize)改變已分配記憶體的大小,ptr為已分配有內
存區域的指針,newsize為新的長度,返回分配好的記憶體指針.
long farcoreleft() 本函式返回遠堆中未用的存儲區的長度,以位元組為單位
void far *farcalloc(unsigned long units,unsigned long unitsz)
從遠堆分配units個長度為unitsz的記憶體空間,並返回所分配記憶體的指針
void *farmalloc(unsigned long size)分配size個位元組的記憶體空間,
並返回分配的記憶體指針
void farfree(void far *block)釋放先前從遠堆分配的記憶體空間,
所要釋放的遠堆記憶體的指針為block
void far *farrealloc(void far *block,unsigned long newsize)改變已分配的遠堆內
存的大小,block為已分配有記憶體區域的指針,newzie為新的長度,返回分配好
的記憶體指針

時間日期函式

函式館為time.hdos.h
在時間日期函數裡,主要用到的結構有以下幾個:
總時間日期貯存結構tm
┌──────────────────────┐
│struct tm │
│{ │
│ int tm_sec; /*秒,0-59*/ │
│ int tm_min; /*分,0-59*/ │
│ int tm_hour; /*時,0-23*/ │
│ int tm_mday; /*天數,1-31*/ │
│ int tm_mon; /*月數,0-11*/ │
│ int tm_year; /*自1900的年數*/ │
│ int tm_wday; /*自星期日的天數0-6*/ │
│ int tm_yday; /*自1月1日起的天數,0-365*/ │
│ int tm_isdst; /*是否採用夏時制,採用為正數*/│
│} │
└──────────────────────┘
日期貯存結構date
┌───────────────┐
│struct date │
│{ │
│ int da_year; /*自1900的年數*/│
│ char da_day; /*天數*/ │
│ char da_mon; /*月數 1=Jan*/ │
│} │
└───────────────┘
時間貯存結構time
┌────────────────┐
│struct time │
│{ │
│ unsigned char ti_min; /*分鐘*/│
│ unsigned char ti_hour; /*小時*/│
│ unsigned char ti_hund; │
│ unsigned char ti_sec; /*秒*/ │
│ │
└────────────────┘char *ctime(long *clock)
本函式把clock所指的時間(如由函式time返回的時間)轉換成下列格式的
字元串:Mon Nov 21 11:31:54 1983\n\0
char *asctime(struct tm *tm)
本函式把指定的tm結構類的時間轉換成下列格式的字元串:
Mon Nov 21 11:31:54 1983\n\0
double difftime(time_t time2,time_t time1)
計算結構time2和time1之間的時間差距(以秒為單位)
struct tm *gmtime(long *clock)本函式把clock所指的時間(如由函式time返回的時間)
轉換成格林威治時間,並以tm結構形式返回
struct tm *localtime(long *clock)本函式把clock所指的時間(如函式time返回的時間)
轉換成當地標準時間,並以tm結構形式返回
void tzset()本函式提供了對UNIX作業系統的兼容性
long dostounix(struct date *dateptr,struct time *timeptr)
本函式將dateptr所指的日期,timeptr所指的時間轉換成UNIX格式,並返回
自格林威治時間1970年1月1日凌晨起到現在的秒數
void unixtodos(long utime,struct date *dateptr,struct time *timeptr)
本函式將自格林威治時間1970年1月1日凌晨起到現在的秒數utime轉換成
DOS格式並保存於用戶所指的結構dateptr和timeptr中
void getdate(struct date *dateblk)本函式將計算機內的日期寫入結構dateblk
中以供用戶使用
void setdate(struct date *dateblk)本函式將計算機內的日期改成
由結構dateblk所指定的日期
void gettime(struct time *timep)本函式將計算機內的時間寫入結構timep中,
以供用戶使用
void settime(struct time *timep)本函式將計算機內的時間改為
由結構timep所指的時間
long time(long *tloc)本函式給出自格林威治時間1970年1月1日凌晨至現在所經
過的秒數,並將該值存於tloc所指的單元中.
int stime(long *tp)本函式將tp所指的時間(例如由time所返回的時間)
寫入計算機中.

相關詞條

相關搜尋

熱門詞條

聯絡我們