C庫函式手冊

Innerpeace_yu發表於2014-11-08

C庫函式手冊


分類函式,所在函式庫為ctype.h

intisalpha(int ch) ch是字母('A'-'Z','a'-'z')返回非0,否則返回0

intisalnum(int ch) ch是字母('A'-'Z','a'-'z')或數字('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是數字('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是標點字元(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) ch16進位制數('0'-'9','A'-'F','a'-'f')返回非0,

否則返回0

inttolower(int ch) ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')

inttoupper(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的值

doublefrexp(double value,int *eptr) 返回value=x*2nx的值,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),yx為弧度

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) 返回直角三角形斜邊的長度(z),

xy為直角邊的長度,z2=x2+y2

double ceil(double x) 返回不小於x的最小整數

doublefloor(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的餘數

doublefrexp(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為轉換時所用基數

doubleatof(char *nptr) 將字串nptr轉換成雙精度數,並返回這個數,錯誤返回0

int atoi(char *nptr) 將字串nptr轉換成整型數, 並返回這個數,錯誤返回0

long atol(char *nptr) 將字串nptr轉換成長整型數,並返回這個數,錯誤返回0

doublestrtod(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)

使用者修改數學錯誤返回資訊函式(沒有必要使用)

unsignedint _clear87() 清除浮點狀態字並返回原來的浮點狀態

void _fpreset() 重新初使化浮點數學程式包

unsignedint _status87() 返回浮點狀態字

======================================================================


目錄函式,所在函式庫為dir.hdos.h

int chdir(char *path) 使指定的目錄path(如:"C:\\WPS")變成當前的工作目錄,

功返回0

intfindfirst(char *pathname,struct ffblk *ffblk,int attrib)查詢指定的檔案,成功

返回0

pathname為指定的目錄名和檔名,"C:\\WPS\\TXT"

ffblk為指定的儲存檔案資訊的一個結構,定義如下:

┏━━━━━━━━━━━━━━━━━━┓

structffblk

{

charff_reserved[21]; /*DOS保留字*/

charff_attrib; /*檔案屬性*/

int ff_ftime; /*檔案時間*/

int ff_fdate; /*檔案日期*/

longff_fsize; /*檔案長度*/

charff_name[13]; /*檔名*/

}

┗━━━━━━━━━━━━━━━━━━┛

attrib為檔案屬性,由以下字元代表

┏━━━━━━━━━┳━━━━━━━━┓

FA_RDONLY只讀檔案┃FA_LABEL 卷標號┃

FA_HIDDEN隱藏檔案┃FA_DIREC 目錄

FA_SYSTEM系統檔案┃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)

此函式通過碟符drive(C:A:),路徑dir(\TC\BC\LIB),

檔名name(TCWPS),副檔名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(TCWPS),副檔名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所在路徑,

,此函式使用DOSPATH變數,未找到檔案返回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函式族中,字尾lvpe新增到exec後,

所指定的函式將具有某種操作能力

有字尾 p時,函式可以利用DOSPATH變數查詢子程式檔案。

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為執行模式

modeP_WAIT 表示在子程式執行完後返回本程式

P_NOWAIT表示在子程式執行時同時執行本程式(不可用)

P_OVERLAY表示在本程式退出後執行子程式

spawn函式族中,字尾lvpe新增到spawn後,

所指定的函式將具有某種操作能力

有字尾p,函式利用DOSPATH查詢子程式檔案

l,函式傳遞的引數個數固定.

v,函式傳遞的引數個數不固定.

e,指定引數envp可以傳遞給子程式,允許改變子程式執行環境.

當無字尾e,子程式使用本程式的環境.


int system(char *command) MSDOS命令command傳遞給DOS執行

======================================================================

轉換子程式,函式庫為math.hstdlib.hctype.hfloat.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為轉換時所用基數

doubleatof(char *nptr) 將字串nptr轉換成雙精度數,並返回這個數,錯誤返回0

int atoi(char *nptr) 將字串nptr轉換成整型數, 並返回這個數,錯誤返回0

long atol(char *nptr) 將字串nptr轉換成長整型數,並返回這個數,錯誤返回0

doublestrtod(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.hconio.hstat.hdos.hstdio.hsignal.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進行輸出,引數從Valistparam中取得

int cscanf(char *format[,argument])從控制檯讀入一個字串,分別對各個引數進行

賦值,直接對控制檯作操作,比如顯示器在顯示時字元時即為直接寫頻方式顯示

int sscanf(char *string,char *format[,argument,])通過字串string,分別對各個

引數進行賦值

int vsscanf(char *string,char *format,Vlist param)通過字串string,分別對各個

引數進行賦值,引數從Vlistparam中取得

int puts(char *string) 發關一個字串string給控制檯(顯示器),

使用BIOS進行輸出

void cputs(char *string) 傳送一個字串string給控制檯(顯示器),

直接對控制檯作操作,比如顯示器即為直接寫頻方式顯示

int printf(char *format[,argument,])傳送格式化字串輸出給控制檯(顯示器)

使用BIOS進行輸出

int vprintf(char *format,Valist param) 傳送格式化字串輸出給控制檯(顯示器)

使用BIOS進行輸出,引數從Valistparam中取得

int cprintf(char *format[,argument,])傳送格式化字串輸出給控制檯(顯示器),

直接對控制檯作操作,比如顯示器即為直接寫頻方式顯示

int vcprintf(char *format,Valist param)傳送格式化字串輸出給控制檯(顯示器),

直接對控制檯作操作,比如顯示器即為直接寫頻方式顯示,

引數從Valistparam中取得

int sprintf(char *string,char *format[,argument,…])

將字串string的內容重新寫為格式化後的字串

int vsprintf(char *string,char *format,Valist param)

將字串string的內容重新寫為格式化後的字串,引數從Valistparam中取得

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 測試可換性;只對於DOS3.x

11 置分享衝突的重算計數;只對DOS3.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 允許其它共享開啟的檔案

└──────┴────────────────────┘

int open(char *pathname,int access[,int permiss])為讀或寫開啟一個檔案,

按後按access來確定是讀檔案還是寫檔案,access值見下表

┌────┬────────────────────┐

access值│意義

├────┼────────────────────┤

O_RDONLY讀檔案

O_WRONLY寫檔案

O_RDWR 即讀也寫

O_NDELAY沒有使用;UNIX系統相容

O_APPEND即讀也寫,但每次寫總是在檔案尾新增

O_CREAT若檔案存在,此標誌無用;若不存在,建新檔案

O_TRUNC若檔案存在,則長度被截為0,屬性不變

O_EXCL 未用;UNIX系統相容

O_BINARY此標誌可顯示地給出以二進位制方式開啟檔案

O_TEXT 此標誌可用於顯示地給出以文字方式開啟檔案│

└────┴────────────────────┘

permiss為檔案屬性,可為以下值:

S_IWRITE允許寫 S_IREAD允許讀 S_IREAD|S_IWRITE允許讀、寫

int creat(char *filename,int permiss) 建立一個新檔案filename,並設定

讀寫性。permiss為檔案讀寫性,可以為以下值

S_IWRITE允許寫 S_IREAD允許讀 S_IREAD|S_IWRITE允許讀、寫

int _creat(char *filename,int attrib) 建立一個新檔案filename,並設定檔案

屬性。attrib為檔案屬性,可以為以下值

FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統

int creatnew(char *filenamt,int attrib) 建立一個新檔案filename,並設定檔案

屬性。attrib為檔案屬性,可以為以下值

FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統

int creattemp(char *filenamt,int attrib) 建立一個新檔案filename,並設定檔案

屬性。attrib為檔案屬性,可以為以下值

FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統

int read(int handle,void *buf,int nbyte)從檔案號為handle的檔案中讀nbyte個字元

存入buf

int _read(int handle,void *buf,int nbyte)從檔案號為handle的檔案中讀nbyte個字元

存入buf,直接呼叫MSDOS進行操作.

int write(int handle,void *buf,int nbyte)buf中的nbyte個字元寫入檔案號

handle的檔案中

int _write(int handle,void *buf,int nbyte)buf中的nbyte個字元寫入檔案號

handle的檔案中

int dup(int handle) 複製一個檔案處理指標handle,返回這個指標

int dup2(int handle,int newhandle) 複製一個檔案處理指標handlenewhandle

int eof(int *handle)檢查檔案是否結束,結束返回1,否則返回0

long filelength(int handle) 返回檔案長度,handle為檔案號

int setmode(int handle,unsigned mode)本函式用來設定檔案號為handle的檔案的打

開方式

int getftime(int handle,struct ftime *ftime) 讀取檔案號為handle的檔案的時間,

並將檔案時間存於ftime結構中,成功返回0,ftime結構如下:

┌─────────────────┐

structftime

{

unsignedft_tsec:5; /**/

unsignedft_min:6; /**/

unsignedft_hour:5; /**/

unsignedft_day:5; /**/

unsignedft_month:4;/**/

unsignedft_year:1; /*-1980*/

}

└─────────────────┘

int setftime(int handle,struct ftime *ftime) 重寫檔案號為handle的檔案時間,

新時間在結構ftime.成功返回0.結構ftime如下:

┌─────────────────┐

structftime

{

unsignedft_tsec:5; /**/

unsignedft_min:6; /**/

unsignedft_hour:5; /**/

unsignedft_day:5; /**/

unsignedft_month:4;/**/

unsignedft_year:1; /*-1980*/

}

└─────────────────┘

long lseek(int handle,long offset,int fromwhere) 本函式將檔案號為handle的檔案

的指標移到fromwhere後的第offset個位元組處.

SEEK_SET檔案開關 SEEK_CUR當前位置 SEEK_END檔案尾

long tell(int handle) 本函式返回檔案號為handle的檔案指標,以位元組表示

int isatty(int handle)本函式用來取裝置handle的型別

int lock(int handle,long offset,long length) 對檔案共享作封鎖

int unlock(int handle,long offset,long length) 開啟對檔案共享的封鎖

int close(int handle) 關閉handle所表示的檔案處理,handle是從_creatcreat

creatnewcreattempdupdup2_openopen中的一個處呼叫獲得的檔案處理

成功返回0否則返回-1,可用於UNIX系統

int _close(int handle) 關閉handle所表示的檔案處理,handle是從_creatcreat

creatnewcreattempdupdup2_openopen中的一個處呼叫獲得的檔案處理

成功返回0否則返回-1,只能用於MSDOS系統


FILE*fopen(char *filename,char *type) 開啟一個檔案filename,開啟方式為type

並返回這個檔案指標,type可為以下字串加上字尾

┌──┬────┬───────┬────────┐

type讀寫性 │文字/2進位制檔案│建新/開啟舊檔案

├──┼────┼───────┼────────┤

r │文字 │開啟舊的檔案

w │文字 │建新檔案

a 新增 │文字 │有就開啟無則建新│

r+ / │不限制 │開啟

w+ / │不限制 │建新檔案

a+ /新增│不限制 │有就開啟無則建新│

└──┴────┴───────┴────────┘

可加的字尾為tb。加b表示檔案以二進位制形式進行操作,t沒必要使用

:┌──────────────────┐

#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中讀一個字元,並返回這個字元

int putc(int ch,FILE *stream)向流stream寫入一個字元ch

int getw(FILE *stream) 從流stream讀入一個整數,錯誤返回EOF

int putw(int w,FILE *stream)向流stream寫入一個整數

int ungetc(char c,FILE *stream) 把字元c退回給流stream,下一次讀進的字元將是c

int fgetc(FILE *stream) 從流stream處讀一個字元,並返回這個字元

int fputc(int ch,FILE *stream) 將字元ch寫入流stream

char*fgets(char *string,int n,FILE *stream) 從流stream中讀n個字元存入string

int fputs(char *string,FILE *stream) 將字串string寫入流stream

int fread(void *ptr,int size,int nitems,FILE *stream) 從流stream中讀入nitems

個長度為size的字串存入ptr

int fwrite(void *ptr,int size,int nitems,FILE *stream)向流stream中寫入nitems

個長度為size的字串,字串在ptr

int fscanf(FILE *stream,char *format[,argument,])以格式化形式從流stream

讀入一個字串

int vfscanf(FILE *stream,char *format,Valist param) 以格式化形式從流stream

讀入一個字串,引數從Valistparam中取得

int fprintf(FILE *stream,char *format[,argument,]) 以格式化形式將一個字元

串寫給指定的流stream

int vfprintf(FILE *stream,char *format,Valist param) 以格式化形式將一個字元

串寫給指定的流stream,引數從Valistparam中取得

int fseek(FILE *stream,long offset,int fromwhere) 函式把檔案指標移到fromwhere

所指位置的向後offset個位元組處,fromwhere可以為以下值:

SEEK_SET檔案開關 SEEK_CUR當前位置 SEEK_END檔案尾

long ftell(FILE *stream) 函式返回定位在stream中的當前檔案指標位置,以位元組表示

int rewind(FILE *stream) 將當前檔案指標stream移到檔案開頭

int feof(FILE *stream) 檢測流stream上的檔案指標是否在結束位置

int fileno(FILE *stream) 取流stream上的檔案處理,並返回檔案處理

int ferror(FILE *stream) 檢測流stream上是否有讀寫錯誤,如有錯誤就返回1

void clearerr(FILE *stream) 清除流stream上的讀寫錯誤

void setbuf(FILE *stream,char *buf) 給流stream指定一個緩衝區buf

void setvbuf(FILE *stream,char *buf,int type,unsigned size)

給流stream指定一個緩衝區buf,大小為size,型別為type,type的值見下表

┌───┬───────────────────────────────┐

type值│意義

├───┼───────────────────────────────┤

_IOFBF檔案是完全緩衝區,當緩衝區是空時,下一個輸入操作將企圖填滿整個緩│

│ │衝區.在輸出時,在把任何資料寫到檔案之前,將完全填充緩衝區.

_IOLBF檔案是行緩衝區.當緩衝區為空時,下一個輸入操作將仍然企圖填整個緩│

│ │衝區.然而在輸出時,每當新行符寫到檔案,緩衝區就被清洗掉.

_IONBF檔案是無緩衝的.bufsize引數是被忽略的.每個輸入操作將直接從文

│ │件讀,每個輸出操作將立即把資料寫到檔案中.

└───┴───────────────────────────────┘

int fclose(FILE *stream) 關閉一個流,可以是檔案或裝置(例如LPT1)

int fcloseall() 關閉所有除stdinstdout外的流

int fflush(FILE *stream) 關閉一個流,並對緩衝區作處理

處理即對讀的流,將流內內容讀入緩衝區;

對寫的流,將緩衝區內內容寫入流。成功返回0

int fflushall() 關閉所有流,並對流各自的緩衝區作處理

處理即對讀的流,將流內內容讀入緩衝區;

對寫的流,將緩衝區內內容寫入流。成功返回0


int access(char *filename,int amode) 本函式檢查檔案filename並返回檔案的屬性,

函式將屬性存於amode中,amode由以下位的組合構成

06可以讀、寫 04可以讀 02可以寫 01執行(忽略的) 00檔案存在

如果filename是一個目錄,函式將只確定目錄是否存在

函式執行成功返回0,否則返回-1

int chmod(char *filename,int permiss) 本函式用於設定檔案filename的屬性

permiss可以為以下值

S_IWRITE允許寫 S_IREAD允許讀 S_IREAD|S_IWRITE允許讀、寫

int _chmod(char *filename,int func[,int attrib]);

本函式用於讀取或設定檔案filename的屬性,

func=0時,函式返回檔案的屬性;當func=1時,函式設定檔案的屬性

若為設定檔案屬性,attrib可以為下列常數之一

FA_RDONLY只讀 FA_HIDDEN隱藏 FA_SYSTEM系統

================================================================================



介面子程式,所在函式庫為:dos.hbios.h

unsignedsleep(unsigned seconds)暫停seconds微秒(百分之一秒)

int unlink(char *filename)刪除檔案filename

unsignedFP_OFF(void far *farptr)本函式用來取遠指標farptr的偏移量

unsignedFP_SEG(void far *farptr)本函式用來沒置遠指標farptr的段值

voidfar *MK_FP(unsigned seg,unsigned off)根據段seg和偏移量off構造一個far指標

unsignedgetpsp()取程式段字首的段地址,並返回這個地址

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結構如下:

┌───────────────────┐

structdfree

{

unsigneddf_avail; /*有用簇個數*/

unsigneddf_total; /*總共簇個數*/

unsigneddf_bsec; /*每個扇區位元組數*/

unsigneddf_sclus; /*每個簇扇區數*/

}

└───────────────────┘

charfar *getdta() 取磁碟轉換地址DTA

void setdta(char far *dta)設定磁碟轉換地址DTA

void getfat(int drive,fatinfo *fatblkp)

本函式返回指定驅動器drive(0=當前,1=A,2=B)的檔案分配表資訊

並存入結構fatblkp,結構如下:

┌──────────────────┐

structfatinfo

{

charfi_sclus; /*每個簇扇區數*/

charfi_fatid; /*檔案分配表位元組數*/

int fi_nclus; /*簇的數目*/

int fi_bysec; /*每個扇區位元組數*/

}

└──────────────────┘

void getfatd(struct fatinfo *fatblkp) 本函式返回當前驅動器的檔案分配表資訊,

並存入結構fatblkp,結構如下:

┌──────────────────┐

structfatinfo

{

charfi_sclus; /*每個簇扇區數*/

charfi_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,

structSREGS *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函式,使用者定義的暫存器值

存於結構inregssegregs,執行完後函式將返回的暫存器值存於結構outregs

void intr(int intr_num,struct REGPACK *preg)本函式中一個備用的8086軟體中斷介面

它能產生一個由引數intr_num指定的8086軟體中斷.函式在執行軟體中斷前,

從結構preg複製使用者定義的各暫存器值到各個暫存器.軟體中斷完成後,

函式將當前各個暫存器的值複製到結構preg.引數如下:

intr_num被執行的中斷號

preg為儲存使用者定義的暫存器值的結構,結構如下

┌──────────────────────┐

structREGPACK

{

unsignedr_ax,r_bx,r_cx,r_dx;

unsignedr_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所指的FCBreccnt個記錄.

int randbwr(struct fcb *fcbptr,int reccnt)

函式將fcbptr所指的FCB中的reccnt個記錄寫到磁碟上

void segread(struct SREGS *segtbl)函式把段暫存器的當前值放進結構segtbl

int getverify() 取檢驗標誌的當前狀態(0=檢驗關閉,1=檢驗開啟)

void setverify(int value)設定當前檢驗狀態,

value0表示關閉檢驗,1表示開啟檢驗

int getcbrk()本函式返回控制中斷檢測的當前設定

int setcbrk(int value)本函式用來設定控制中斷檢測為接通或斷開

value=0,為斷開檢測.value=1,為接開檢測


int dosexterr(struct DOSERR *eblkp)取擴充套件錯誤.DOS出現錯誤後,此函式將擴充的

錯誤資訊填入eblkp所指的DOSERR結構中.該結構定義如下:

┌──────────────┐

structDOSERR

{

int exterror;/*擴充套件錯誤*/

charclass; /*錯誤型別*/

charaction; /*方式*/

charlocus; /*錯誤場所*/

}

└──────────────┘

int bioscom(int cmd,char type,int port) 本函式負責對資料的通訊工作,

cmd可以為以下值:

0置通訊引數為位元組byte 1傳送字元通過通訊線輸出

2從通訊線接受字元 3返回通訊的當前狀態

port為通訊埠,port=0時通訊埠為COM1,port=1時通訊埠為COM2,以此類推

byte為傳送或接收資料時的引數,為以下位的組合:

┌───┬─────┬───┬─────┬───┬─────┐

byte值│意義 byte值│意義 byte值│意義

├───┼─────┼───┼─────┼───┼─────┤

0x02 7資料位 0x03 8資料位 0x00 1停止位

0x04 2停止位 0x00 無奇偶性 0x08 奇數奇偶性│

0x18 偶數奇偶性│0x00 110波特 0x20 150波特

0x40 300波特 0x60 600波特 0x80 1200波特

0xA0 2400波特 0xC0 4800波特 0xE0 9600波特

└───┴─────┴───┴─────┴───┴─────┘

例如:0xE0|0x08|0x00|0x03即表示置通訊口為9600波特,奇數奇偶性,1停止位,

8資料位.

函式返回值為一個16位整數,定義如下:

15超時

14傳送移位暫存器空

13傳送固定暫存器空

12中斷檢測

11幀錯誤

10奇偶錯誤

9過載執行錯誤

8資料就緒

7接收線訊號檢測

6環形指示器

5資料設定就緒

4清除傳送

3δ接收線訊號檢測器

2下降邊環形檢測器

1δ資料設定就緒

0δ清除傳送


int biosdisk(int cmd,int drive,int head,int track,

intsector,int nsects,void *buffer)

本函式用來對驅動器作一定的操作,cmd為功能號,

drive為驅動器號(0=A,1=B,0x80=C,0x81=D,0x82=E).cmd可為以下值:

0重置軟磁碟系統.這強迫驅動器控制器來執行硬復位.忽略所有其它引數.

1返回最後的硬碟操作狀態.忽略所有其它引數

2讀一個或多個磁碟扇區到記憶體.讀開始的扇區由headtracksector給出。

扇區號由nsects給出。把每個扇區512個位元組的資料讀入buffer

3從記憶體讀資料寫到一個或多個扇區。寫開始的扇區由headtracksector

給出。扇區號由nsects給出。所寫資料在buffer中,每扇區512個位元組。

4檢驗一個或多個扇區。開始扇區由headtracksector給出。扇區號由

nsects給出。

5格式化一個磁軌,該磁軌由headtrack給出。buffer指向寫在指定track

的扇區磁頭器的一個表。

以下cmd值只允許用於XTAT微機:

6格式化一個磁軌,並置壞扇區標誌。

7格式化指定磁軌上的驅動器開頭。

8返回當前驅動器引數,驅動器資訊返回寫在buffer(以四個位元組表示)

9初始化一對驅動器特性。

10執行一個長的讀,每個扇區讀5124個額外位元組

11執行一個長的寫,每個扇區寫5124個額外位元組

12執行一個磁碟查詢

13交替磁碟復位

14讀扇區緩衝區

15寫扇區緩衝區

16檢查指定的驅動器是否就緒

17複核驅動器

18控制器RAM診斷

19驅動器診斷

20控制器內部診

函式返回由下列位組合成的狀態位元組:

0x00操作成功

0x01壞的命令

0x02地址標記找不到

0x04記錄找不到

0x05重置失敗

0x07驅動引數活動失敗

0x09企圖DMA經過64K界限

0x0B檢查壞的磁碟標記

0x10壞的ECC在磁碟上讀

0x11ECC校正的資料錯誤(注意它不是錯誤)

0x20控制器失效

0x40查詢失敗

0x80響應的連線失敗

0xBB出現無定義錯誤

0xFF讀出操作失敗


int biodquip() 檢查裝置,函式返回一位元組,該位元組每一位表示一個資訊,如下:

15印表機號

14印表機號

13未使用

12連線遊戲I/O

11RS232埠號

8未使用

7軟磁碟號

6軟磁碟號,

001號驅動器,012號驅動器,103號驅動器,114號驅動器

5初始化

4顯示器模式

00為未使用,0140x25BW彩色顯示卡

1080x25BW彩色顯示卡,1180x25BW單色顯示卡

3母扦件

2隨機存貯器容量,0016K,0132K,1048K,1164K

1浮點共用處理器

0從軟磁碟引導


int bioskey(int cmd)本函式用來執行各種鍵盤操作,由cmd確定操作。

cmd可為以下值:

0返回敲鍵盤上的下一個鍵。若低8位為非0,即為ASCII字元;若低8位為0,

則返回擴充了的鍵盤程式碼。

1測試鍵盤是否可用於讀。返回0表示沒有鍵可用;否則返回下一次敲鍵之值。

敲鍵本身一直保持由下次呼叫具的cmd值為0bioskey所返回的值。

2返回當前的鍵盤狀態,由返回整數的每一個位表示,見下表:

┌──┬───────────┬───────────┐

│ 位│為0時意義 │為1時意義

├──┼───────────┼───────────┤

7 插入狀態 │改寫狀態

6 大寫狀態 │小寫狀態

5 數字狀態,NumLock燈亮│游標狀態,NumLock燈熄

4 ScrollLock燈亮 ScrollLock燈熄

3 Alt按下 Alt未按下

2 Ctrl按下 Ctrl未按下

1 Shift按下 │左Shift未按下

0 Shift按下 │右Shift未按下

└──┴───────────┴───────────┘

int biosmemory()返回記憶體大小,K為單位.

int biosprint(int cmd,int byte,int port)控制印表機的輸入/輸出.

port為印表機號,0LPT1,1LPT2,2LPT3

cmd可以為以下值:

0列印字元,將字元byte送到印表機

1印表機埠初始化

2讀印表機狀態

函式返回值由以下位值組成表示當前印表機狀態

0x01裝置時間超時

0x08輸入/輸出錯誤

0x10選擇的

0x20走紙

0x40認可

0x80不忙碌


int biostime(int cmd,long newtime)計時器控制,cmd為功能號,可為以下值

0函式返回計時器的當前值

1將計時器設為新值newtime


structcountry *country(int countrycmode,struct country *countryp)

本函式用來控制某一國家的相關資訊,如日期,時間,貨幣等.

countryp=-1,當前的國家置為countrycode(必須為非0).否則,countryp

所指向的country結構用下列的國家相關資訊填充:

(1)當前的國家(countrycode02)countrycode所給定的國家.

結構country定義如下:

┌────────────────────┐

structcountry

{

int co_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]; /*補充字元*/

}

└────────────────────┘

co_date的值所代表的日期格式是:

0月日年 1日月年 2年月日

co_currstrle的值所代表的貨幣顯示方式是

0貨幣符號在數值前,中間無空格

1貨幣符號在數值後,中間無空格

2貨幣符號在數值前,中間有空格

3貨幣符號在數值後,中間有空格

=============================================================================


操作函式,所在函式庫為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位元組長.

memcpysource複製一個n位元組的塊到destin.如果源塊和目標塊重迭,則選擇複製方向,

以例正確地複製覆蓋的位元組.

memmovememcpy相同.

memsets的所有位元組置於位元組ch.s陣列的長度由n給出.

memcmp比較正好是n位元組長的兩個字串s1s2.些函式按無符號字元比較位元組,因此,

memcmp("0xFF","\x7F",1)返回值大於0.

memicmp比較s1s2的前n個位元組,不管字元大寫或小寫.

memccpysource複製位元組到destin.複製一結束就發生下列任一情況:

(1)字元ch首選複製到destin.

(2)n個位元組已複製到destin.

memchr對字元ch檢索s陣列的前n個位元組.

返回值:memmovememcpy返回destin

memset返回s的值

memcmpmemicmp─┬─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,

intsegdest,int offdest,

unsignednumbytes)

本函式將源地址(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)

比較字串s1s2的大小,並返回s1-s2

char strcpy(char *dest,const char *src)

將字串src複製到dest

size_tstrcspn(const char *s1,const char *s2)

掃描s1,返回在s1中有,s2中也有的字元個數

char strdup(const char *s)

將字串s複製到最近建立的單元

int stricmp(const char *s1,const char *s2)

比較字串s1s2,並返回s1-s2

size_tstrlen(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)

比較字串s1s2中的前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)

比較字串s1s2中的前maxlen個字元

char strnset(char *s,int ch,size_t n)

將字串s的前n個字元置於ch

char strpbrk(const char *s1,const char *s2)

掃描字串s1,並返回在s1s2中均有的字元個數

char strrchr(const char *s,int c)

掃描最後出現一個給定字元c的一個字串s

char strrev(char *s)

將字串s中的字元全部顛倒順序重新排列,並返回排列後的字串

char strset(char *s,int ch)

將一個字串s中的所有字元置於一個給定的字元ch

size_tstrspn(const char *s1,const char *s2)

掃描字串s1,並返回在s1s2中均有的字元個數

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.halloc.hmalloc.hstdlib.hprocess.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個位元組的空間


unsignedlong 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() 本函式返回遠堆中未用的儲存區的長度,以位元組為單位

voidfar *farcalloc(unsigned long units,unsigned long unitsz)

從遠堆分配units個長度為unitsz的記憶體空間,並返回所分配記憶體的指標

void *farmalloc(unsigned long size)分配size個位元組的記憶體空間,

並返回分配的記憶體指標

void farfree(void far *block)釋放先前從遠堆分配的記憶體空間,

所要釋放的遠堆記憶體的指標為block

voidfar *farrealloc(void far *block,unsigned long newsize)改變已分配的遠堆內

存的大小,block為已分配有記憶體區域的指標,newzie為新的長度,返回分配好

的記憶體指標


時間日期函式,函式庫為time.hdos.h

在時間日期函式裡,主要用到的結構有以下幾個:

總時間日期貯存結構tm

┌──────────────────────┐

structtm

{

inttm_sec; /*,0-59*/

inttm_min; /*,0-59*/

inttm_hour; /*,0-23*/

inttm_mday; /*天數,1-31*/

inttm_mon; /*月數,0-11*/

inttm_year; /*1900的年數*/

inttm_wday; /*自星期日的天數0-6*/

inttm_yday; /*11日起的天數,0-365*/

inttm_isdst; /*是否採用夏時制,採用為正數*/

}

└──────────────────────┘

日期貯存結構date

┌───────────────┐

structdate

{

intda_year; /*1900的年數*/

charda_day; /*天數*/

charda_mon; /*月數1=Jan*/

}

└───────────────┘

時間貯存結構time

┌────────────────┐

structtime

{

unsignedchar ti_min; /*分鐘*/

unsignedchar ti_hour; /*小時*/

unsignedchar ti_hund;

unsignedchar ti_sec; /**/

│ │

└────────────────┘

char *ctime(long *clock)

本函式把clock所指的時間(如由函式time返回的時間)轉換成下列格式的

字串:MonNov 21 11:31:54 1983\n\0

char *asctime(struct tm *tm)

本函式把指定的tm結構類的時間轉換成下列格式的字串:

MonNov 21 11:31:54 1983\n\0

double difftime(time_t time2,time_t time1)

計算結構time2time1之間的時間差距(以秒為單位)

structtm *gmtime(long *clock)本函式把clock所指的時間(如由函式time返回的時間)

轉換成格林威治時間,並以tm結構形式返回

structtm *localtime(long *clock)本函式把clock所指的時間(如函式time返回的時間)

轉換成當地標準時間,並以tm結構形式返回

void tzset()本函式提供了對UNIX作業系統的相容性

long dostounix(struct date *dateptr,struct time *timeptr)

本函式將dateptr所指的日期,timeptr所指的時間轉換成UNIX格式,並返回

自格林威治時間197011日凌晨起到現在的秒數

void unixtodos(long utime,struct date *dateptr,struct time *timeptr)

本函式將自格林威治時間197011日凌晨起到現在的秒數utime轉換成

DOS格式並儲存於使用者所指的結構dateptrtimeptr

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)本函式給出自格林威治時間197011日凌晨至現在所經

過的秒數,並將該值存於tloc所指的單元中.

int stime(long *tp)本函式將tp所指的時間(例如由time所返回的時間)

寫入計算機中.


相關文章