linuxc函數(shù)庫參考手冊_第1頁
linuxc函數(shù)庫參考手冊_第2頁
linuxc函數(shù)庫參考手冊_第3頁
linuxc函數(shù)庫參考手冊_第4頁
linuxc函數(shù)庫參考手冊_第5頁
已閱讀5頁,還剩213頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

LinuxC函數(shù)參考

isalnum(測試字符是否為英文或數(shù)字)

相關(guān)函數(shù)isalpha,isdigit,islower,isupper

表頭文件#include<ctype.h>

定義函數(shù)intisalnum(intc)

檢查參數(shù)c是否為英文字母或阿拉伯?dāng)?shù)字,在標(biāo)準(zhǔn)c中相當(dāng)于使用

函數(shù)說明

(isalpha(c)11isdigit(c))做測試。

返回值若參數(shù)c為字母或數(shù)字,貝IJ返回TRUE,否則返回NULL(O)。

附加說明此為宏定義,非真正函數(shù)。

范例

/*找出str字符串中為英文字母或數(shù)字的字符*/

#include<ctype.h>

main()

(

charstr[]=,,123c@#FDsP[er;

inti;

for(i=O;str[i]!=O;i++)

if(isalnum(str[i]))printf(t4%cisanalphanumericcharacter\nM,str[i]);

)

執(zhí)行

1isanapphabeticcharacter

2isanapphabeticcharacter

3isanapphabeticcharacter

cisanapphabeticcharacter

Fisanapphabeticcharacter

Disanapphabeticcharacter

sisanapphabeticcharacter

Pisanapphabeticcharacter

eisanapphabeticcharacter

isalpha(測試字符是否為英文字母)

相關(guān)函數(shù)isalnum,islower,isupper

表頭文件#include<ctype.h>

定義函數(shù)intisalpha(intc)

檢查參數(shù)c是否為英文字母,在標(biāo)準(zhǔn)c中相當(dāng)于使用(isupper(C)

函數(shù)說明

llislower(c))做測試。

返回值若參數(shù)c為英文字母,貝1」返回TRUE,否則返回NULL(O)。

附加說明此為宏定義,非真正函數(shù)

范例

/*找出str字符串中為英文字母的字符*/

#include<ctype.h>

main()

(

charstr[]=,,123c@#FDsP[er;

inti;

for(i=O;str[i]!=O;i++)

if(isalpha(str|i]))printf(u%cisanalphanumericcharacter\nM,str[i]);

)

執(zhí)行

cisanapphabeticcharacter

Fisanapphabeticcharacter

Disanapphabeticcharacter

sisanapphabeticcharacter

Pisanapphabeticcharacter

eisanapphabeticcharacter

isascii(測試字符是否為ASCII碼字符)

相關(guān)函數(shù)iscntrl

表頭文件#include<ctype.h>

定義函數(shù)intisascii(intc);

檢查參數(shù)c是否為ASCII碼字符,也就是判斷c的范圍是否在0到

函數(shù)說明

127之間。

返回值若參數(shù)c為ASCH碼字符,則返回TRUE,否則返回NULL(0

附加說明此為宏定義,非真正函數(shù)。

范例

/*判斷inti是否具有對映的ASCII碼字符*/

#include<ctype.h>

main()

(

inti;

for(i=125;i<130;i++)

if(isascii(i))

printf(H%disanasciicharacter:%c\nn,i,i);

else

printf("%disnotanasciicharacter\n",i);

)

執(zhí)行

125isanasciicharacter:}

126isanasciicharacter:-

127isanasciicharacter:

128isnotanasciicharacter

129isnotanasciicharacter

iscntrl(測試字符是否為ASCII碼的控制字符)

相關(guān)函數(shù)isascii

表頭文件#include<ctype.h>

定義函數(shù)intiscntrl(intc);

檢查參數(shù)C是否為ASCII控制碼,也就是判斷c的范圍是否在0到

函數(shù)說明

30之間

返回值若參數(shù)c為ASCH控制碼,則返回TRUE,否則返回NULL(0)。

附加說明此為宏定義,非真正函數(shù)。

isdigit(測試字符是否為阿拉伯?dāng)?shù)字)

相關(guān)函數(shù)isxdigit

表頭文件#include<ctype.h>

定義函數(shù)intisdigit(intc)

函數(shù)說明檢查參數(shù)c是否為阿拉伯?dāng)?shù)字0到9o

返回值若參數(shù)c為阿拉伯?dāng)?shù)字,則返回TRUE,否則返回NULL(0)。

附加說明此為宏定義,非真正函數(shù)。

范例

/*找出str字符串中為阿拉伯?dāng)?shù)字的字符*/

#include<ctype.h>

main()

(

charstr[]=H123?#FDsP[e?n;

inti;

for(i=0;str[i]!=0;i++)

if(isdigit(str|i]))printf(n%cisandigitcharactertn'\strfi]);

執(zhí)行

1isandigitcharacter

2isandigitcharacter

3isandigitcharacter

isgraphis(測試字符是否為可打印字符)

相關(guān)函數(shù)isprint

表頭文件#include<ctype.h>

定義函數(shù)intisgraph(intc)

檢查參數(shù)c是否為可打印字符,若c所對映的ASCII碼可打印,且

函數(shù)說明

非空格字符則返回TRUE。

返回值若參數(shù)c為可打印字符,則返回TRUE,否則返回NULL(0)。

附加說明此為宏定義,非真正函數(shù)

范例

/*判斷str字符串中哪些為可打印字符*/

#include<ctype.h>

main()

(

charstr[]="a5@;M;

inti;

for(i=0;str[i]!=0;i++)

if(isgraph(str[i]))printf(',str[%d]isprintablecharacter:%d\nn,i,str[i]);

}

執(zhí)行

str[O]isprintablecharacter:a

str[l]isprintablecharacter:5

str[3]isprintablecharacter:@

str[4]isprintablecharacter:;

islower(測試字符是否為小寫字母)

相關(guān)函數(shù)isalpha,isupper

表頭文件#include<ctype.h>

定義函數(shù)intislower(intc)

函數(shù)說明檢查參數(shù)c是否為小寫英文字母。

返回值若參數(shù)c為小寫英文字母,則返回TRUE,否則返回NULL(0)。

附加說明此為宏定義,非真正函數(shù)。

范例

#include<ctype.h>

main()

(

charstr[]=,,123@#FDsP[e?H;

inti;

for(i=0;str[i]!=0;i++)

if(islower(str[i]))printf(M%cisalower-casecharacter\nn,str|i|);

)

執(zhí)行

cisalower-casecharacter

sisalower-casecharacter

eisalower-casecharacter

isprint(測試字符是否為可打印字符)

相關(guān)函數(shù)isgraph

表頭文件#include<ctype.h>

定義函數(shù)intisprint(intc);

檢查參數(shù)c是否為可打印字符,若c所對映的ASCII碼可打印,其

函數(shù)說明

中包含空格字符,則返回TRUE。

返回值若參數(shù)c為可打印字符,貝IJ返回TRUE,否則返回NULL(0)。

附加說明此為宏定義,非真正函數(shù)。

范例

/*判斷str字符串中哪些為可打印字符包含空格字符*/

#include<ctype.h>

main()

{

charstr[]=na5

inti;

for(i=0;str[i]!=0;i++)

if(isprint(str[i]))printf(nstr[%d]isprintablecharacter:%d\n",i,str[i]);

執(zhí)行

str[0]isprintablecharacter:a

str[l]isprintablecharacter:5

str[2]isprintablecharacter:

str[3]isprintablecharacter:@

str[4]isprintablecharacter:;

isspace(測試字符是否為空格字符)

相關(guān)函數(shù)isgraph

表頭文件#include<ctype.h>

定義函數(shù)intisspace(intc)

檢查參數(shù)c是否為空格字符,也就是判斷是否為空格(”)、定保

函數(shù)說明符(*)、CR「\r》順('\n)垂直定位字符(W)或蹶:(W)

的情況。

返回值若參數(shù)c為空格字符,則返回TRUE,否則返回NULL(0)。

附加說明此為宏定義,非真正函數(shù)

范例

/*將字符串str[]中內(nèi)含的空格字符找出,并顯示空格字符的ASCH碼*/

#include<ctype.h>

main()

charstr="123c@#FD\tsP[e?\nu;

inti;

for(i=0;str[i]!=0;i++)

if(isspace(str[i]))

printf(nstr[%djisawhite-spacecharacter:%d\nn,i,str[i]);

)

執(zhí)行I

str[4]isawhite-spacecharacter:32

str[7]isawhite-spacecharacter:32

str[10]isawhite-spacecharacter:9/*\t*/

str[16]isawhite-spacecharacter:10/*\t*/

ispunct(測試字符是否為標(biāo)點符號或特殊符號)

相關(guān)函數(shù)isspace,isdigit,isalpha

表頭文件#inlude<ctype.h>

定義函數(shù)intispunct(intc)

檢查參數(shù)c是否為標(biāo)點符號或特殊符號。返回TRUE也就是代表參

函數(shù)說明

數(shù)c為非空格、非數(shù)字和非英文字母。

若參數(shù)c為標(biāo)點符號或特殊符號,則返回TRUE,否則返回NULL

返回值

(0)?

附加說明此為宏定義,非真正函數(shù)

范例

/*列出字符串str中的標(biāo)點符號或特殊符號*/

#include<ctype.h>

main()

(

charstr[]=u123c@#FDsP[e?H;

inti;

for(i=0;str[i]!=0;i++)

if(ispunct(str[i]))printf(n%c\n",str[i]);

執(zhí)行

@#[?

isupper(測試字符是否為大寫英文字母)

相關(guān)函數(shù)isalpha,islower

表頭文件#include<ctype.h>

定義函數(shù)intisupper(intc)

函數(shù)說明檢查參數(shù)c是否為大寫英文字母。

返回值若參數(shù)C為大寫英文字母,則返回TRUE,否則返回NULL(0)。

附加說明此為宏定義,非真正函數(shù)

范例

/*找出字符串str中為大寫英文字母的字符*/

#include<ctype.h>

main()

|

charstr[]=H123c@#FDsP[e?H;

inti;

for(i=O;str[i]!=0;i++)

if(isupper(str[i]))printf(M%cisanuppercasecharacter\nn,str[i]);

)

執(zhí)行

Fisanuppercasecharacter

Disanuppercasecharacter

Pisanuppercasecharacter

isxdigit(測試字符是否為16進制數(shù)字)

相關(guān)函數(shù)isalnum,isdigit

表頭文件#include<ctype.h>

定義函數(shù)intisxdigit(intc)

檢查參數(shù)C是否為16進制數(shù)字,只要c為下列其中一個情況則返回

函數(shù)說明

TRUEo16進制數(shù)字:0123456789ABCDEF

返回值若參數(shù)c為16進制數(shù)字,則返回TRUE,否則返回NULL(0)。

附加說明此為宏定義,非真正函數(shù)。

范例

/*找出字符串str中為十六進制數(shù)字的字符*/

#include<ctype.h>

main()

(

charstr[]=n123c@#FDsP[e?n;

inti;

for(i=0;str[i]!=0;i++)

if(isxdigit(str|i]))printf(n%cisahexadecimaldigits\nH,str[i]);

)

執(zhí)行

1isahexadecimaldigits

2isahexadecimaldigits

3isahexadecimaldigits

cisahexadecimaldigits

Fisahexadecimaldigits

Disahexadecimaldigits

eisahexadecimaldigits

atof(將字符串轉(zhuǎn)換成浮點型數(shù))

相關(guān)函數(shù)atoi,atol,strtod,strtol,strtoul

表頭文件#include<stdlib.h>

定義函數(shù)doubleatof(constchar*nptr);

atof()會掃描參數(shù)叩tr字符串,跳過前面的空格字符,直到遇上

數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時

函數(shù)說明

(VT)才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。參數(shù)叩tr字符串可包含正負(fù)

號、小數(shù)點或E(e)來表示指數(shù)部分,如123.456或123e-2。

返回值返回轉(zhuǎn)換后的浮點型數(shù)。

附加說明atof()與使用strtod(nptr,(char**)NULL);結(jié)果相同。

范例

/*將字符串a(chǎn)與字符串b轉(zhuǎn)換成數(shù)字后相加*/

#include<stdlib.h>

main()

{

char00.23”;

char*b=,,200e-2M;

floatc;

c=atof(a)+atof(b);

printf("c=%.2f\n",c);

)

執(zhí)行I

c=-98.23

atoi(將字符串轉(zhuǎn)換成整型數(shù))

相關(guān)函數(shù)atof,atohatrtod,strtol,strtoul

表頭文件#include<stdlib.h>

定義函數(shù)intatoi(constchar*nptr);

atoi()會掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)字

函數(shù)說明或正負(fù)符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')

才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。

返回值返回轉(zhuǎn)換后的整型數(shù)。

附加說明atoi()與使用strtol(nptr,(char**)NULL,10);結(jié)果相同。

范例

/*將字符串a(chǎn)與字符串b轉(zhuǎn)換成數(shù)字后相加*/

#include<stdlib.h>

mian()

(

char昨"-100”;

charb[]="456”;

intc;

c=atoi(a)+atoi(b);

printf(c=%d\n,,,c);

)

執(zhí)行

c=356

atol(將字符串轉(zhuǎn)換成長整型數(shù))

相關(guān)函數(shù)atof,atoi,strtod,strtol,strtoul

表頭文件#include<stdlib.h>

定義函數(shù)longatol(constchar*nptr);

atol()會掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)字

函數(shù)說明或正負(fù)符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')

才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。

返回值返回轉(zhuǎn)換后的長整型數(shù)。

附加說明atol()與使用strtol(nptr,(char**)NULL,10);結(jié)果相同。

范例

/*將字符串a(chǎn)與字符串b轉(zhuǎn)換成數(shù)字后相加*/

#include<stdlib.h>

main。

char叫=”1000000000”;

charb[]="234567890”;

longc;

c=atol(a)+atol(b);

printf(uc=%d\n,,,c);

)

執(zhí)行I

c=1234567890

gCVt(將浮點型數(shù)轉(zhuǎn)換為字符串,取四舍五入)

相關(guān)函數(shù)ecvt,fcvt,sprintf

表頭文件#include<stdlib.h>

定義函數(shù)char*gcvt(doublenumber,size_tndigits,char*buf);

gcvt()用來將參數(shù)number轉(zhuǎn)換成ASCII碼字符串,參數(shù)ndigits表示

顯示的位數(shù)。gcvt()與ecvt()和fcvt()不同的地方在于,gcvt()所轉(zhuǎn)換

函數(shù)說明

后的字符串包含小數(shù)點或正負(fù)符號。若轉(zhuǎn)換成功,轉(zhuǎn)換后的字符串

會放在參數(shù)buf指針?biāo)傅目臻g。

返回值返回一字符串指針,此地址即為buf指針。

附加說明

范例

#include<stdlib.h>

main()

{

doublea=123.45;

doubleb=-1234.56;

char*ptr;

intdecpt,sign;

gcvt(a,5,ptr);

printf(4tavalue=%s\n,,,ptr);

pti^gcvt(b,6,ptr);

printf(4<bvalue=%s\n,\ptr);

)

執(zhí)行

avalue=123.45

bvalue=-1234.56

strtod(將字符串轉(zhuǎn)換成浮點數(shù))

相關(guān)函數(shù)atoi,atoLstrtod,strtol,strtoul

表頭文件#include<stdlib.h>

定義函數(shù)doublestrtod(constchar*nptr,char**endptr);

strtod。會掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)

字或正負(fù)符號才開始做轉(zhuǎn)換,直到出現(xiàn)非數(shù)字或字符串結(jié)束時

(AOO才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。若endptr不為NULL,則會

函數(shù)說明

將遇到不合條件而終止的nptr中的字符指針由endptr傳回。參數(shù)

叩tr字符串可包含正負(fù)號、小數(shù)點或E(e)來表示指數(shù)部分。如

123.456或123e-2.

返回值返回轉(zhuǎn)換后的浮點型數(shù)。

附加說明參考atof()o

范例

/*將字符串a(chǎn),b,c分別采用10,2,16進制轉(zhuǎn)換成數(shù)字*/

#include<stdlib.h>

mian()

char叫=”1000000000”;

charb[]="1000000000”;

charc[]=,,ffff,;

printf(<<a=%d\n,,,strtod(a,NULL,10));

printf(4tb=%d\nn,strtod(b,NULL,2));

printf(<tc=%d\n,,,strtod(c,NULLJ6));

)

執(zhí)行I

a=1000000000

b=512

c=65535

strtol(將字符串轉(zhuǎn)換成長整型數(shù))

相關(guān)函數(shù)atof,atoi,atol,strtod,strtoul

表頭文件#include<stdlib.h>

定義函數(shù)longintstrtol(constchar*nptr,char**endptr,intbase);

strtol()會將參數(shù)nptr字符串根據(jù)參數(shù)base來轉(zhuǎn)換成長整型數(shù)。

參數(shù)base范圍從2至36,或0。參數(shù)base代表采用的進制方式,

如base值為10則采用10進制,若base值為16則采用16進制等。

當(dāng)base值為0時則是采用10進制做轉(zhuǎn)換,但遇到如'Ox,前置字符

函數(shù)說明則會使用16進制做轉(zhuǎn)換。-開始strtol()會掃描參數(shù)nptr字符串,

跳過前面的空格字符,宜到遇上數(shù)字或正負(fù)符號才開始做轉(zhuǎn)換,再

遇到非數(shù)字或字符串結(jié)束時('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。若參數(shù)

endptr不為NULL,則會將遇到不合條件而終止的nptr中的字符指

針由endptr返回。

返回轉(zhuǎn)換后的長整型數(shù),否則返回ERANGE并將錯誤代碼存入

返回值

errno中。

附加說明ERANGE指定的轉(zhuǎn)換字符串超出合法范圍。

范例

/*將字符串a(chǎn),b,c分別采用10,2,16進制轉(zhuǎn)換成數(shù)字刃

#include<stdlib.h>

main。

|

char叫=”1000000000”;

charb[]="1000000000”;

charc[]=,,ffff,;

printf(<<a=%d\n,,,strtol(a,NULL,10));

printf(44b=%d\n,,,strtol(b,NULL,2));

printf(<tc=%d\n,,,strtol(c,NULL,16));

)

執(zhí)行I

a=1000000000

b=512

c=65535

strtoul(將字符串轉(zhuǎn)換成無符號長整型數(shù))

相關(guān)函數(shù)atof,atoi,atol,strtod,strtol

表頭文件#include<stdlib.h>

定義函數(shù)unsignedlongintstrtoul(constchar*nptr,char**endptr,intbase);

strtoul。會將參數(shù)叩tr字符串根據(jù)參數(shù)base來轉(zhuǎn)換成無符號的長整

型數(shù)。參數(shù)base范圍從2至36,或0。參數(shù)base代表采用的進制

方式,如base值為10則采用10進制,若base值為16則采用16

進制數(shù)等。當(dāng)base值為0時則是采用10進制做轉(zhuǎn)換,但遇到如'Ox,

函數(shù)說明前置字符則會使用16進制做轉(zhuǎn)換。一開始strtoul()會掃描參數(shù)

nptr字符串,跳過前面的空格字符串,直到遇上數(shù)字或正負(fù)符號才

開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時('\0')結(jié)束轉(zhuǎn)換,并

將結(jié)果返回。若參數(shù)endptr不為NULL,則會將遇到不合條件而終

止的nptr中的字符指針由endptr返回。

返回轉(zhuǎn)換后的長整型數(shù),否則返回ERANGE并將錯誤代碼存入

返回值

errno中。

附加說明ERANGE指定的轉(zhuǎn)換字符串超出合法范圍。

范例

參考strtol()

toascii(將整型數(shù)轉(zhuǎn)換成合法的ASCH碼字符)

相關(guān)函數(shù)isascii,toupper,tolower

表頭文件#include<ctype.h>

定義函數(shù)inttoascii(intc)

toascii()會將參數(shù)c轉(zhuǎn)換成7位的unsignedchar值,第八位則會

函數(shù)說明

被清除,此字符即會被轉(zhuǎn)成ASCH碼字符。

返回值將轉(zhuǎn)換成功的ASCII碼字符值返回。

范例

#include<stdlib.h>

main()

(

inta=217;

charb;

printf(4tbeforetoascii():avalue=%d(%c)\n,\a,a);

b=toascii(a);

printf(uaftertoascii():avalue=%d(%c)\n,?,b,b);

)

執(zhí)行

beforetoascii():avalue=217()

aftertoascii():avalue=89(Y)

tolower(將大寫字母轉(zhuǎn)換成小寫字母)

相關(guān)函數(shù)isalpha,toupper

表頭文件#include<stdlib.h>

定義函數(shù)inttolower(intc);

函數(shù)說明若參數(shù)C為大寫字母則將該對應(yīng)的小寫字母返回。

返回值返回轉(zhuǎn)換后的小寫字母,若不須轉(zhuǎn)換則將參數(shù)C值返回

附加說明

范例

/*將S字符串內(nèi)的大寫字母轉(zhuǎn)換成小寫字母*/

#include<ctype.h>

main()

(

chars[]二"aBcDeFgH12345;!#$'';

inti;

printf(t4beforetolower():%s\n,,,s);

fbr(i=0;I<sizeof(s);i++)

s[i]=tolower(s[i]);

printfC'aftertolower():%s\nM,s);

)

執(zhí)行

beforetolower():aBcDeFgH12345;!#$

aftertolower():abcdefghI2345;!#$

toupper(將小寫字母轉(zhuǎn)換成大寫字母)

相關(guān)函數(shù)isalpha,tolower

表頭文件#include<ctype.h>

定義函數(shù)inttoupper(intc);

函數(shù)說明若參數(shù)c為小寫字母則將該對映的大寫字母返回。

返回值返回轉(zhuǎn)換后的大寫字母,若不須轉(zhuǎn)換則將參數(shù)C值返回。

附加說明

范例

/*將S字符串內(nèi)的小寫字母轉(zhuǎn)換成大寫字母*/

#include<ctype.h>

main()

chars[]=,,aBcDeFgH12345;!#$M;

inti;

printf(ubeforetoupper():%s\n”,s);

for(i=0;l<sizeof(s);i++)

s[i]=toupper(s[i]);

printfC'aftertoupper():%s\n”,s);

)

執(zhí)行

beforetoupper():aBcDeFgH12345;!#$

aftertoupper():ABCDEFGH12345;!#$

Calloc(配置內(nèi)存空間)

相關(guān)函數(shù)malloc,free,realloc,brk

表頭文件#include<stdlib.h>

定義函數(shù)void*calloc(size_tnmemb,size_tsize);

calloc。用來配置nmemb個相鄰的內(nèi)存單位,每一單位的大小為

size,并返回指向第一個元素的指針。這和使用下列的方式效果相

函數(shù)說明

同:malloc(nmemb*size);不過,在利用calloc()配置內(nèi)存時會將內(nèi)存

內(nèi)容初始化為0o

返回值若配置成功則返回一指針,失敗則返回NULL。

范例

/*動態(tài)配置10個structtest空間*/

#include<stdlib.h>

structtest

(

inta|10];

charb[20J;

)

main()

structtest*ptr=calloc(sizeof(structtest),10);

)

free(釋放原先配置的內(nèi)存)

相關(guān)函數(shù)malloc,calloc,realloc,brk

表頭文件#include<stdlib.h>

定義函數(shù)voidfree(void*ptr);

參數(shù)ptr為指向先前由malloc0、calloc()或realloc()所返回的內(nèi)存

指針。調(diào)用free。后ptr所指的內(nèi)存空間便會被收回。假若參數(shù)ptr

函數(shù)說明所指的內(nèi)存空間已被收回或是未知的內(nèi)存地址,則調(diào)用free。可能

會有無法預(yù)期的情況發(fā)生。若參數(shù)ptr為NULL,則free。不會有任

何作用。

getpagesize(取得內(nèi)存分頁大小)

相關(guān)函數(shù)sbrk

表頭文件#include<unistd.h>

定義函數(shù)size_tgetpagesize(void);

返回一分頁的大小,單位為字節(jié)(byte)。此為系統(tǒng)的分頁大小,不

函數(shù)說明

一定會和硬件分頁大小相同。

返回值內(nèi)存分頁大小。

附加說明在Intelx86上其返回值應(yīng)為4096bytes,

范例

#include<unistd.h>

main()

printf(44pagesize=%d\n,\getpagesize());

malloc(配置內(nèi)存空間)

相關(guān)函數(shù)calloc,free,realloc,brk

表頭文件#include<stdlib.h>

定義函數(shù)void*malloc(size_tsize);

函數(shù)說明malloc()用來配置內(nèi)存空間,其大小由指定的size決定。

返回值若配置成功則返回一指針,失敗則返回NULL。

范例|

voidp=malloc(1024);/*配置1k的內(nèi)存*/

mmap(建立內(nèi)存映射)

相關(guān)函數(shù)munmap,open

#include<unistd.h>

表頭文件

#include<sys/mman.h>

void*mmap(void*start,size_tlengthjntprotjntflags,intfd,ofCl

定義函數(shù)

offsize);

mmap()用來將某個文件內(nèi)容映射到內(nèi)存中,對該內(nèi)存區(qū)域的存取即

是直接對該文件內(nèi)容的讀寫。

參數(shù)start指向欲時應(yīng)的內(nèi)存起始地址,通常設(shè)為NULL,代表讓系

統(tǒng)自動選定地址,對應(yīng)成功后該地址會返回。參數(shù)length代表將文

件中多大的部分對應(yīng)到內(nèi)存。參數(shù)prot代表映射區(qū)域的保護方式,

有下列組合:

PROT_EXEC映射區(qū)域可被執(zhí)行

函數(shù)說明PROT_READ映射區(qū)域可被讀取

PROT_WRITE映射區(qū)域可被寫入

PROT_NONE映射區(qū)域不能存取

參數(shù)flags會影響映射區(qū)域的各種特性:

MAP_FIXED如果參數(shù)start所指的地址無法成功建立映射時,

則放棄映射,不對地址做修正。通常不鼓勵用此

旗標(biāo)。

MAP_SHARED對映射區(qū)域的寫入數(shù)據(jù)會復(fù)制回文件內(nèi),而且

允許其他映射該文件的進程共享。

MAP_PRIVATE對映射區(qū)域的寫入操作會產(chǎn)生一個映射文件的

復(fù)制,即私人的“寫入時復(fù)制”(copyonwrite)

對此區(qū)域作的任何修改都不會寫回原來的文

件內(nèi)容。

MAP_ANONYMOUS建立匿名映射。此時會忽略參數(shù)fd,不涉

及文件,而且映射區(qū)域無法和其他進程共

享。

MAP_DENYWRITE只允許對映射區(qū)域的寫入操作,其他對文件

直接寫入的操作將會被拒絕。

MAP_LOCKED將映射區(qū)域鎖定住,這表示該區(qū)域不會被置換

(swap)?

在調(diào)用mmap()時必須要指定MAP_SHARED或MAP_PRIVATEo

參數(shù)fd為open。返回的文件描述詞,代表欲映射到內(nèi)存的文件。參

數(shù)offset為文件映射的偏移量,通常設(shè)置為0,代表從文件最前方

開始對應(yīng),。ffset必須是分頁大小的整數(shù)倍。

若映射成功則返回映射區(qū)的內(nèi)存起始地址,否則返回MAP_FAILED

返回值

(―1).錯誤原因存于errno中。

EBADF參數(shù)fd不是有效的文件描述詞

EACCES存取權(quán)限有誤。如果是MAP_PRIVATE情況下文件必須

可讀,使用MAP_SHARED則要有PROT_WRITE以及

錯誤代碼該文件要能寫入。

EINVAL參數(shù)start、length或offset有一個不合法。

EAGAIN文件被鎖住,或是有太多內(nèi)存被鎖住。

ENOMEM內(nèi)存不足。

范例

/*利用mmapO來讀取/etc/passwd文件內(nèi)容*/

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

#include<sys/mman.h>

main()

(

intfd;

void*start;

structstatsb;

fd=open(“/etc/passwd”Q_RDONLY);/*打開/etc/passwd*/

fstat(fd,&sb);/*取得文件大小*/

start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0);

if(start==MAP_FAILED)/*判斷是否映射成功*/

return;

printf(t<%s^^,start);

munmap(start,sb.st_size);/*解除映射*/

close(fd);

執(zhí)行

root:x:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:

daemon:x:2:2:daemon:/sbin

adm:x:3:4:adm:/var/adm:

Ip:x:4:7:Ip:/var/spool/lpd:

sync:x:5:0:sync:/sbin:bin/sync:

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:

news:x:9:13:news:/var/spool/news:

uucp:x:10:14:uucp:/var/spool/uucp:

operator:x:11:0:operator:/root:

games:x:12:100:games:/usr/games:

gopher:x:13:30:gopher:/usr/lib/gopher-data:

ftp:x:14:50:FTPUser:/home/ftp:

nobody:x:99:99:Nobody:/:

xfs:xJOO:101:XFontServer:/etc/xll/fs:/bin/false

gdm:x:42:42::/home/gdm:/bin/bash

kids:x:500:500:/home/kids:/bin/bash

munmap(解除內(nèi)存映射)

相關(guān)函數(shù)mmap

#include<unistd.h>

表頭文件

#include<sys/mman.h>

定義函數(shù)intmunmap(void*start,size_tlength);

munmap。用來取消參數(shù)start所指的映射內(nèi)存起始地址,參數(shù)length

則是欲取消的內(nèi)存大小。當(dāng)進程結(jié)束或利用exec相關(guān)函數(shù)來執(zhí)行其

函數(shù)說明

他程序時,映射內(nèi)存會自動解除,但關(guān)閉對應(yīng)的文件描述詞時不會

解除映射。

返回值如果解除映射成功則返回0,否則返回一1,錯誤原因存于errn。中

錯誤代碼EINVAL參數(shù)start或length不合法。

范例

參考mmap()

asctime(將時間和日期以字符串格式表示)

相關(guān)函數(shù)time,ctime,gmtime,localtime

表頭文件#include<time.h>

定義函數(shù)char*asctime(conststructtm*timeptr);

asctime()將參數(shù)timeptr所指的tm結(jié)構(gòu)中的信息轉(zhuǎn)換成真實世界

所使用的時間H期表示方法,然后將結(jié)果以字符串形態(tài)返回。此函

函數(shù)說明

數(shù)已經(jīng)由時區(qū)轉(zhuǎn)換成當(dāng)?shù)貢r間,字符串格式為:

“WedJun3021:49:081993\n”

若再調(diào)用相關(guān)的時間日期函數(shù),此字符串可能會被破壞。此函數(shù)與

返回值

ctime不同處在于傳入的參數(shù)是不同的結(jié)構(gòu)。

附加說明返回一字符串表示目前當(dāng)?shù)氐臅r間日期。

范例|

#include<time.h>

main()

(

time_ttimep;

time(&timep);

printf(<*%s,\asctime(gmtime(&timep)));

執(zhí)行

SatOct2802:10:062000

ctime(將時間和日期以字符串格式表示)

相關(guān)函數(shù)time,asctime,gmtime,localtime

表頭文件#include<time.h>

定義函數(shù)char*ctime(consttime_t*timep);

ctime()將參數(shù)timep所指的time」結(jié)構(gòu)中的信息轉(zhuǎn)換成真實世界

所使用的時間日期表示方法,然后將結(jié)果以字符串形態(tài)返回。此函

函數(shù)說明

數(shù)已經(jīng)由時區(qū)轉(zhuǎn)換成當(dāng)?shù)貢r間,字符串格式為“WedJun3021:4908

1993\n\若再調(diào)用相關(guān)的時間日期函數(shù),此字符串可能會被破壞。

返回值返回一字符串表示目前當(dāng)?shù)氐臅r間日期。

范例

#include<time.h>

main()

{

time_ttimep;

time(&timep);

printf("%s”,ctime(&timep));

)

執(zhí)行

SatOct2810:12:052000

gettimeofday(取得目前的時間)

相關(guān)函數(shù)time,ctime,ftime,settimeofday

#include<sys/time.h>

表頭文件

#include<unistd.h>

定義函數(shù)intgettimeofday(structtimeval*tv,structtimezone*tz)

gettimeofday()會把目前的時間有tv所指的結(jié)構(gòu)返回,當(dāng)?shù)貢r區(qū)

的信息則放到tz所指的結(jié)構(gòu)中。timeval結(jié)構(gòu)定義為:

函數(shù)說明

structtimeval{

longtv_sec;/*秒*/

longtv_usec;/*微秒*/

);

timezone結(jié)構(gòu)定義為:

structtimezone{

inttz_minuteswest;/*和Greenwich時間差了多少分鐘*/

inttz_dsttime;/*日光節(jié)約時間的狀態(tài)*/

);

上述兩個結(jié)構(gòu)都定義在/usr/include/sys/time.h。tz_dsttime所代

表的狀態(tài)如下:

DST.NONE/*不使用*/

DST.USA/*美國*/

DST_AUST/*澳洲*/

DST_WET/*西歐*/

DST_MET/*中歐*/

DST_EET/*東歐*/

DST.CAN/*加拿大*/

DST_GB/*大不列顛*/

DST_RUM/*羅馬尼亞*/

DST_TUR/*土耳其*/

DST_AUSTALT/*澳洲(1986年以后)*/

返回值成功則返回0,失敗返回一1,錯誤代碼存于ermo。

附加說明EFAULT指針tv和tz所指的內(nèi)存空間超出存取權(quán)限。

范例

#include<sys/time.h>

#include<unistd.h>

main(){

structtimevaltv;

structtimezonetz;

gettimeofday(&tv,&tz);

printf("tv_sec;%d\n",tv,.tv_sec);

printf(4<tv_usec;%d\n,,,tv.tv_usec);

printf(<€tz_minuteswest;%d\n",tz.tz_minuteswest);

printf(<4tz_dsttime,%d\n,,,tz.tz_dsttime);

執(zhí)行

tv_sec:974857339

tv_usec:136996

tz_minuteswest:-540

tz_dsttime:O

gmtime(取得目前時間和日期)

相關(guān)函數(shù)time,asctime,dime,localtime

表頭文件#include<time.h>

定義函數(shù)structtm*gmtime(consttime_t*timep);

gmtime()將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成真實世界

所使用的時間日期表示方法,然后將結(jié)果由結(jié)構(gòu)tm返回。結(jié)構(gòu)tm

的定義為:

structtm

{

inttm_sec;

int

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論