![項(xiàng)目相關(guān)-常用函數(shù)_第1頁(yè)](http://file4.renrendoc.com/view/7f2224311d6c715a640570c9354219e6/7f2224311d6c715a640570c9354219e61.gif)
![項(xiàng)目相關(guān)-常用函數(shù)_第2頁(yè)](http://file4.renrendoc.com/view/7f2224311d6c715a640570c9354219e6/7f2224311d6c715a640570c9354219e62.gif)
![項(xiàng)目相關(guān)-常用函數(shù)_第3頁(yè)](http://file4.renrendoc.com/view/7f2224311d6c715a640570c9354219e6/7f2224311d6c715a640570c9354219e63.gif)
![項(xiàng)目相關(guān)-常用函數(shù)_第4頁(yè)](http://file4.renrendoc.com/view/7f2224311d6c715a640570c9354219e6/7f2224311d6c715a640570c9354219e64.gif)
![項(xiàng)目相關(guān)-常用函數(shù)_第5頁(yè)](http://file4.renrendoc.com/view/7f2224311d6c715a640570c9354219e6/7f2224311d6c715a640570c9354219e65.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
常用函數(shù)文件描述符概念:所有打開(kāi)文件都由它引用是一個(gè)非負(fù)整數(shù)。當(dāng)打開(kāi)一個(gè)現(xiàn)存文件或創(chuàng)建一個(gè)文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符。當(dāng)讀、寫(xiě)一個(gè)文件時(shí),用open或creat返回的文件描述符標(biāo)識(shí)該文件,將其作為參數(shù)傳送給read或write1.open(打開(kāi)文件)頭文件:#include<fcntl.h>定義函數(shù):intopen(constchar*pathname,intflags,mode_tmode);函數(shù)說(shuō)明:參數(shù)pathname指向欲打開(kāi)的文件路徑字符串。下列是參數(shù)flags所
能使用的旗標(biāo):O_RDONLY以只讀方式打開(kāi)文件O_WRONLY以只寫(xiě)方式打開(kāi)文件O_RDWR以可讀寫(xiě)方式打開(kāi)文件。上述三種旗標(biāo)是互斥的,也
就是不可同時(shí)使用,但可與下列的旗標(biāo)利用OR(|)運(yùn)算符組合。O_CREAT若欲打開(kāi)的文件不存在則自動(dòng)建立該文件。O_EXCL如果O_CREAT也被設(shè)置,此指令會(huì)去檢查文件是否存
在。文件若不存在則建立該文件,否則將導(dǎo)致打開(kāi)文件錯(cuò)誤。此外,
若O_CREAT與O_EXCL同時(shí)設(shè)置,并且欲打開(kāi)的文件為符號(hào)連接,
則會(huì)打開(kāi)文件失敗。返回值:若所有欲核查的權(quán)限都通過(guò)了檢查則返回0值,表示成功,只要有
一個(gè)權(quán)限被禁止則返回-1。2.read(由已打開(kāi)的文件讀取數(shù)據(jù))頭文件:#include<unistd.h>定義函數(shù):ssize_tread(intfd,void*buf,size_tcount);函數(shù)說(shuō)明:read()會(huì)把參數(shù)fd所指的文件傳送count個(gè)字節(jié)到buf指針?biāo)?/p>
的內(nèi)存中。若參數(shù)count為0,則read()不會(huì)有作用并返回0。返
回值為實(shí)際讀取到的字節(jié)數(shù),如果返回0,表示已到達(dá)文件尾或是
無(wú)可讀取的數(shù)據(jù),此外文件讀寫(xiě)位置會(huì)隨讀取到的字節(jié)移動(dòng)。參數(shù)含義:[1]文件描述符[2]分配的用戶(hù)存儲(chǔ)空間[3]期望讀多少數(shù)據(jù)出來(lái)返回值:讀到的字節(jié)數(shù),若已到文件尾為0,若出錯(cuò)為-1.附加說(shuō)明:如果順利read()會(huì)返回實(shí)際讀到的字節(jié)數(shù),最好能將返回值與參
數(shù)count作比較,若返回的字節(jié)數(shù)比要求讀取的字節(jié)數(shù)少,則有可
能讀到了文件尾、從管道(pipe)或終端機(jī)讀取,或者是read()
被信號(hào)中斷了讀取動(dòng)作。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1,錯(cuò)誤代碼存入errno中,而文件讀寫(xiě)位置則無(wú)法預(yù)期。3.write(將數(shù)據(jù)寫(xiě)入已打開(kāi)的文件內(nèi))頭文件:#include<unistd.h>定義函數(shù):ssize_twrite(intfd,constvoid*buf,size_tcount);函數(shù)說(shuō)明:write()會(huì)把參數(shù)buf所指的內(nèi)存寫(xiě)入count個(gè)字節(jié)到參數(shù)fd所指
的文件內(nèi)。當(dāng)然,文件讀寫(xiě)位置也會(huì)隨之移動(dòng)。返回值:如果順利write()會(huì)返回實(shí)際寫(xiě)入的字節(jié)數(shù)。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返
回-1,錯(cuò)誤代碼存入errno中。4.lseek(移動(dòng)文件的讀寫(xiě)位置)頭文件:#include<unistd.h>定義函數(shù):off_tlseek(intfildes,off_toffset,intwhence);函數(shù)說(shuō)明:每一個(gè)已打開(kāi)的文件都有一個(gè)讀寫(xiě)位置,當(dāng)打開(kāi)文件時(shí)通常其讀寫(xiě)
位置是指向文件開(kāi)頭,若是以附加的方式打開(kāi)文件(如O_APPEND),則讀寫(xiě)
位置會(huì)指向文件尾。當(dāng)read()或write()時(shí),讀寫(xiě)位置會(huì)隨之增加,lseek
()便是用來(lái)控制該文件的讀寫(xiě)位置。參數(shù)fildes為已打開(kāi)的文件描述詞,參數(shù)offset為根據(jù)參數(shù)whence來(lái)移動(dòng)讀寫(xiě)位置的位移數(shù)。參數(shù)whence為下列其中一種:SEEK_SET參數(shù)offset即為新的讀寫(xiě)位置。SEEK_CUR以目前的讀寫(xiě)位置往后增加offset個(gè)位移量。SEEK_END將讀寫(xiě)位置指向文件尾后再增加offset個(gè)位移量。
當(dāng)whence值為SEEK_CUR或SEEK_END時(shí),參數(shù)offet允許負(fù)值的出現(xiàn)。
下列是教特別的使用方式:1)欲將讀寫(xiě)位置移到文件開(kāi)頭時(shí):lseek(intfildes,0,SEEK_SET);2)欲將讀寫(xiě)位置移到文件尾時(shí):lseek(intfildes,0,SEEK_END);3)想要取得目前文件位置時(shí):lseek(intfildes,0,SEEK_CUR);返回值:若文件
返回值:當(dāng)調(diào)用成功時(shí)則返回目前的讀寫(xiě)位置,也就是距離文件開(kāi)頭多少個(gè)
字節(jié)。若有錯(cuò)誤則返回-1,errno會(huì)存放錯(cuò)誤代碼。5.close(關(guān)閉文件)頭文件:#include<unistd.h>定義函數(shù):intclose(intfd);函數(shù)說(shuō)明:當(dāng)使用完文件后若已不再需要?jiǎng)t可使用close()關(guān)閉該文件,二close()會(huì)讓數(shù)據(jù)寫(xiě)回磁盤(pán),并釋放該文件所占用的資源。參數(shù)fd
為先前由open()或creat()所返回的文件描述詞。返回值:若文件順利關(guān)閉則返回0,發(fā)生錯(cuò)誤時(shí)返回-1。附加說(shuō)明:雖然在進(jìn)程結(jié)束時(shí),系統(tǒng)會(huì)自動(dòng)關(guān)閉已打開(kāi)的文件,但仍建議自行
關(guān)閉文件,并確實(shí)檢查返回值。6.creat(創(chuàng)建文件)頭文件:#include<fcntl.h>定義函數(shù):intcreat(constchar*pathname,mode_tmode);函數(shù)說(shuō)明:參數(shù)pathname指向欲建立的文件路徑字符串。creat()相當(dāng)于使
用下列的調(diào)用方式調(diào)用open():open(constchar*pathname,(O_CREAT|O_WRONLY|O_TRUNC));返回值:creat()會(huì)返回新的文件描述詞,若有錯(cuò)誤發(fā)生則會(huì)返回-1,并把錯(cuò)誤代碼設(shè)給errno。EEXIST參數(shù)pathname所指的文件已存在。EACCESS參數(shù)pathname所指定的文件不符合所要求測(cè)試的權(quán)限EROFS欲打開(kāi)寫(xiě)入權(quán)限的文件存在于只讀文件系統(tǒng)內(nèi)EFAULT參數(shù)pathname指針超出可存取的內(nèi)存空間EINVAL參數(shù)mode不正確。ENAMETOOLONG參數(shù)pathname太長(zhǎng)。ENOTDIR參數(shù)pathname為一目錄ENOMEM核心內(nèi)存不足ELOOP參數(shù)pathname有過(guò)多符號(hào)連接問(wèn)題。EMFILE已達(dá)到進(jìn)程可同時(shí)打開(kāi)的文件數(shù)上限ENFILE已達(dá)到系統(tǒng)可同時(shí)打開(kāi)的文件數(shù)上限附加說(shuō)明:creat()無(wú)法建立特別的裝置文件,如果需要請(qǐng)使用mknod()。7.chmod(改變文件的權(quán)限)頭文件:#include<sys/types.h>#include<sys/stat.h>定義函數(shù):intchmod(constchar*path,mode_tmode);函數(shù)說(shuō)明:chmod()會(huì)依參數(shù)mode權(quán)限來(lái)更改參數(shù)path指定文件的權(quán)限。
參數(shù)mode有下列數(shù)種組合:S_ISUID04000文件的(setuser-idonexecution)位S_ISGID02000文件的(setgroup-idonexecution)位S_ISVTX01000文件的sticky位S_IRUSR(S_IREAD)00400文件所有者具可讀取權(quán)限S_IWUSR(S_IWRITE)00200文件所有者具可寫(xiě)入權(quán)限S_IXUSR(S_IEXEC)00100文件所有者具可執(zhí)行權(quán)限S_IRGRP00040用戶(hù)組具可讀取權(quán)限S_IWGRP00020用戶(hù)組具可寫(xiě)入權(quán)限S_IXGRP00010用戶(hù)組具可執(zhí)行權(quán)限S_IROTH00004其他用戶(hù)具可讀取權(quán)限S_IWOTH00002其他用戶(hù)具可寫(xiě)入權(quán)限S_IXOTH00001其他用戶(hù)具可執(zhí)行權(quán)限
只有該文件的所有者或有效用戶(hù)識(shí)別碼為0,才可以修改該文件權(quán)
限?;谙到y(tǒng)安全,如果欲將數(shù)據(jù)寫(xiě)入一執(zhí)行文件,而該執(zhí)行文件
具有S_ISUID或S_ISGID權(quán)限,則這兩個(gè)位會(huì)被清除。如果一目
錄具有S_ISUID位權(quán)限,表示在此目錄下只有該文件的所有者或root可以刪除該文件。返回值:權(quán)限改變成功返回0,失敗返回-1,錯(cuò)誤原因存于errno。8.printf(格式化輸出數(shù)據(jù))頭文件:#include<stdio.h>定義函數(shù):intprintf(constchar*format,.............);函數(shù)說(shuō)明:printf()會(huì)根據(jù)參數(shù)format字符串來(lái)轉(zhuǎn)換并格式化數(shù)據(jù),然后將結(jié)
果寫(xiě)出到標(biāo)準(zhǔn)輸出設(shè)備,直到出現(xiàn)字符串結(jié)束(’\0’)為止。
參數(shù)format字符串可包含下列三種字符類(lèi)型:1.一般文本,伴隨直接輸出。2.ASCII控制字符,如\t、\n等。3.格式轉(zhuǎn)換字符。
格式轉(zhuǎn)換為一個(gè)百分比符號(hào)(%)及其后的格式字符所組成。一般
而言,每個(gè)%符號(hào)在其后都必需有一printf()的參數(shù)與之相呼應(yīng)
(只有當(dāng)%%轉(zhuǎn)換字符出現(xiàn)時(shí)會(huì)直接輸出%字符),而欲輸出的數(shù)
據(jù)類(lèi)型必須與其相對(duì)應(yīng)的轉(zhuǎn)換字符類(lèi)型相同。返回值:成功則返回實(shí)際輸出的字符數(shù),失敗則返回-1,錯(cuò)誤原因存于errno
中。9.malloc(配置內(nèi)存空間)頭文件:#include<stdlib.h>定義函數(shù):void*malloc(size_tsize);函數(shù)說(shuō)明:malloc()用來(lái)配置內(nèi)存空間,其大小由指定的size決定。返回值:若配置成功則返回一指針,失敗則返回NULL。范例:voidp=malloc(1024);/*配置1k的內(nèi)存*/10.calloc(配置內(nèi)存空間)頭文件:#include<stdlib.h>定義函數(shù):void*calloc(size_tnmemb,size_tsize);函數(shù)說(shuō)明:calloc()用來(lái)配置nmemb個(gè)相鄰的內(nèi)存單位,每一單位的大小為size,并返回指向第一個(gè)元素的指針。這和使用下列的方式效果相
同:malloc(nmemb*size);不過(guò),在利用calloc()配置內(nèi)存時(shí)會(huì)將內(nèi)
存內(nèi)容初始化為0。返回值:若配置成功則返回一指針,失敗則返回NULL。
11.free(釋放原先配置的內(nèi)存)頭文件:#include<stdlib.h>定義函數(shù):voidfree(void*ptr);函數(shù)說(shuō)明:參數(shù)ptr為指向先前由malloc()、calloc()或realloc()所返回的內(nèi)存
指針。調(diào)用free()后ptr所指的內(nèi)存空間便會(huì)被收回。假若參數(shù)ptr
所指的內(nèi)存空間已被收回或是未知的內(nèi)存地址,則調(diào)用free()可能
會(huì)有無(wú)法預(yù)期的情況發(fā)生。若參數(shù)ptr為NULL,則free()不會(huì)有任
何作用。12.mmap(建立內(nèi)存映射)頭文件:#include<unistd.h>#include<sys/mman.h>定義函數(shù):void*mmap(void*start,size_tlength,intprot,intflags,intfd,off_toffsize);函數(shù)說(shuō)明:mmap()用來(lái)將某個(gè)文件內(nèi)容映射到內(nèi)存中,對(duì)該內(nèi)存區(qū)域的存取即
是直接對(duì)該文件內(nèi)容的讀寫(xiě)。參數(shù)start指向欲對(duì)應(yīng)的內(nèi)存起始地址,
通常設(shè)為NULL,代表讓系統(tǒng)自動(dòng)選定地址,對(duì)應(yīng)成功后該地址會(huì)返回。
參數(shù)length代表將文件中多大的部分對(duì)應(yīng)到內(nèi)存。參數(shù)prot代表映射
區(qū)域的保護(hù)方式,
有下列組合:PROT_EXEC映射區(qū)域可被執(zhí)行PROT_READ映射區(qū)域可被讀取PROT_WRITE映射區(qū)域可被寫(xiě)入PROT_NONE映射區(qū)域不能存取返回值:若映射成功則返回映射區(qū)的內(nèi)存起始地址,否則返回MAP_FAILED
(-1),錯(cuò)誤原因存于errno中。
13.munmap(解除內(nèi)存映射)頭文件:#include<unistd.h>#include<sys/mman.h>定義函數(shù):intmunmap(void*start,size_tlength);函數(shù)說(shuō)明:munmap()用來(lái)取消參數(shù)start所指的映射內(nèi)存起始地址,參數(shù)length則是欲取消的內(nèi)存大小。當(dāng)進(jìn)程結(jié)束或利用exec相關(guān)函數(shù)來(lái)
執(zhí)行其他程序時(shí),映射內(nèi)存會(huì)自動(dòng)解除,但關(guān)閉對(duì)應(yīng)的文件描述詞時(shí)
不會(huì)解除映射。返回值:如果解除映射成功則返回0,否則返回-1,錯(cuò)誤原因存于errno中
14.memset(將一段內(nèi)存空間填入某值)頭文件:#include<string.h>定義函數(shù):void*memset(void*s,intc,size_tn);函數(shù)說(shuō)明:memset()會(huì)將參數(shù)s所指的內(nèi)存區(qū)域前n個(gè)字節(jié)以參數(shù)c填入,
然后返回指向s的指針。在編寫(xiě)程序時(shí),若需要將某一數(shù)組作初始
化,memset()會(huì)相當(dāng)方便。返回值:返回指向s的指針。附加說(shuō)明:參數(shù)c雖聲明為int,但必須是unsignedchar,所以范圍在0到255
之間。
范例:#include<string.h>main(){chars[30];memset(s,’A’,sizeof(s));s[30]=’\0’;printf(“%s\n”,s);}執(zhí)行:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA15.bzero(將一段內(nèi)存內(nèi)容全清為零)頭文件:#include<string.h>定義函數(shù):voidbzero(void*s,intn);函數(shù)說(shuō)明:bzero()會(huì)將參數(shù)s所指的內(nèi)存區(qū)域前n個(gè)字節(jié),全部設(shè)為零值。
相當(dāng)于調(diào)用memset((void*)s,0,size_tn);返回值:無(wú)附加說(shuō)明:建議使用memset取代16.fflush(更新緩沖區(qū))頭文件:#include<stdio.h>定義函數(shù):intfflush(FILE*stream);函數(shù)說(shuō)明:fflush()會(huì)強(qiáng)迫將緩沖區(qū)內(nèi)的數(shù)據(jù)寫(xiě)回參數(shù)stream指定的文件中。
如果參數(shù)stream為NULL,fflush()會(huì)將所有打開(kāi)的文件數(shù)據(jù)更新。返回值:成功返回0,失敗返回EOF,錯(cuò)誤代碼存于errno中。17.memcmp(比較內(nèi)存內(nèi)容)頭文件:#include<string.h>定義函數(shù):intmemcmp(constvoid*s1,constvoid*s2,size_tn);函數(shù)說(shuō)明:memcmp()用來(lái)比較s1和s2所指的內(nèi)存區(qū)間前n個(gè)字符。字符
串大小的比較是以ASCII碼表上的順序來(lái)決定,次順序亦為字符的
值。memcmp()首先將s1第一個(gè)字符值減去s2第一個(gè)字符的值,
若差為0則再繼續(xù)比較下個(gè)字符,若差值不為0則將差值返回。例
如,字符串“Ac”和“ba”比較則會(huì)返回字符‘A’(65)和‘b’
(98)的差值(-33)。返回值:若參數(shù)s1和s2所指的內(nèi)存內(nèi)容都完全相同則返回0值。s1若大于s2則返回大于0的值。s1若小于s2則返回小于0的值。范例:#include<string.h>main(){char*a=”aBcDeF”;char*b=”AbCdEf”;char*c=”aacdef”;char*d=”aBcDeF”;printf(“memcmp(a,b):%d\n”,memcmp((void*)a,(void*)b,6));printf(“memcmp(a,c):%d\n”,memcmp((void*)a,(void*)c,6));printf(“memcmp(a,d):%d\n”,memcmp((void*)a,(void*)d,6));}執(zhí)行:memcmp(a,b):1/*字符串a(chǎn)>字符串b,返回1*/memcmp(a,c):-1/*字符串a(chǎn)<字符串c,返回-1*/memcmp(a,d):0/*字符串a(chǎn)=字符串d,返回0*/18.memcpy(拷貝內(nèi)存內(nèi)容)頭文件:#include<string.h>定義函數(shù):void*memcpy(void*dest,constvoid*src,size_tn);函數(shù)說(shuō)明:memcpy()用來(lái)拷貝src所指的內(nèi)存內(nèi)容前n個(gè)字節(jié)到dest所指的1、
內(nèi)存地址上。與strcpy()不同的是,memcpy()會(huì)完整的復(fù)制n
個(gè)字節(jié),不會(huì)因?yàn)橛龅阶址Y(jié)束‘\0‘而結(jié)束。strcpy只能復(fù)制字符串,而memcpy可以復(fù)制任意內(nèi)容,例如字符數(shù)組、整型、結(jié)構(gòu)體、類(lèi)等。返回值:若參數(shù)s1
和s2所指的內(nèi)存內(nèi)容都完全相同則返回0值。s1若大于s2則返回大于0的值。s1若小于s2則返回小于0的值。返回值:返回指向dest的指針。附加說(shuō)明:指針src和dest所指的內(nèi)存區(qū)域不可重疊。
19.strcat(連接兩字符串)頭文件:#include<string.h>定義函數(shù):char*strcat(char*dest,constchar*src);函數(shù)說(shuō)明:strcat()會(huì)將參數(shù)src字符串拷貝到參數(shù)dest所指的字符串尾。第
一個(gè)參數(shù)dest要有足夠的空間來(lái)容納要拷貝的字符串。返回值:返回參數(shù)dest的字符串起始地址附加說(shuō)明:指針src和dest所指的內(nèi)存區(qū)域不可重疊。范例:#include<string.h.>main(){chara[30]=”string(1)”;charb[]=”string(2)”;printf(“beforestrcat():%s\n”,a);printf(“afterstrcat():%s\n”,strcat(a,b));}執(zhí)行:beforestrcat():string(1)afterstrcat():string(1)string(2)20.strcmp(比較字符串)頭文件:#include<string.h>定義函數(shù):intstrcmp(constchar*s1,constchar*s2);函數(shù)說(shuō)明:strcmp()用來(lái)比較參數(shù)s1和s2字符串。字符串大小的比較是以ASCII碼表上的順序來(lái)決定,此順序亦為字符的值。strcmp()首
先將s1第一個(gè)字符值減去s2第一個(gè)字符值,若差值為0則再繼續(xù)
比較下個(gè)字符,若差值不為0則將差值返回。例如字符串“Ac”和“ba”比較則會(huì)返回字符“A”(65)和‘b’(98)的差值(-33)。返回值:若參數(shù)s1和s2字符串相同則返回0。s1若大于s2則返回大于0的
值。s1若小于s2則返回小于0的值。范例:#include<string.h>main(){char*a=”aBcDeF”;char*b=”AbCdEf”;char*c=”aacdef”;char*d=”aBcDeF”;printf(“strcmp(a,b):%d\n”,strcmp(a,b));printf(“strcmp(a,c):%d\n”,strcmp(a,c));printf(“strcmp(a,d):%d\n”,strcmp(a,d));}執(zhí)行:strcmp(a,b):1strcmp(a,c):-1strcmp(a,d):021.strncpy(拷貝字符串)頭文件:#include<string.h>定義函數(shù):char*strncpy(char*dest,constchar*src,size_tn);函數(shù)說(shuō)明:strncpy()會(huì)將參數(shù)src字符串拷貝前n個(gè)字符至參數(shù)dest所指的
地址。返回值:返回參數(shù)dest的字符串起始地址。范例:#inclue<string.h>main(){chara[30]=”string(1)”;charb[]=”string(2)”;printf(“beforestrncpy():%s\n”,a);printf(afterstrncpy():%s\n”,strncpy(a,b,6));}執(zhí)行:beforestrncpy():string(1)afterstrncpy():string(1)22.strcpy(拷貝字符串)頭文件:#include<string.h>定義函數(shù):char*strcpy(char*dest,constchar*src);函數(shù)說(shuō)明:strcpy()會(huì)將參數(shù)src字符串拷貝至參數(shù)dest所指的地址。返回值:返回參數(shù)dest的字符串起始地址。附加說(shuō)明:如果參數(shù)dest所指的內(nèi)存空間不夠大,可能會(huì)造成緩沖溢出(bufferOverflow)的錯(cuò)誤情況,在編寫(xiě)程序時(shí)請(qǐng)?zhí)貏e留意,或者用strncpy
()來(lái)取代。范例:#include<string.h>main(){chara[30]=”string(1)”;charb[]=”string(2)”;printf(“beforestrcpy():%s\n”,a);printf(“afterstrcpy():%s\n”,strcpy(a,b));}執(zhí)行:beforestrcpy():string(1)afterstrcpy():string(2)23.strlen(返回字符串長(zhǎng)度)頭文件:#include<string.h>定義函數(shù):size_tstrlen(constchar*s);函數(shù)說(shuō)明:strlen()用來(lái)計(jì)算指定的字符串s的長(zhǎng)度,不包括結(jié)束字符“\0”。返回值:返回字符串s的字符數(shù)。范例:/*取得字符串str的長(zhǎng)度*/#include<string.h>main(){char*str=”12345678”;printf(“strlength=%d\n”,strlen(str));}執(zhí)行:strlength=824.strncat(連接兩字符串)頭文件:#include<string.h>定義函數(shù):char*strncat(char*dest,constchar*src,size_tn);函數(shù)說(shuō)明:strncat()會(huì)將參數(shù)src字符串拷貝n個(gè)字符到參數(shù)dest所指的字
符串尾。第一個(gè)參數(shù)dest要有足夠的空間來(lái)容納要拷貝的字符串。返回值:返回參數(shù)dest的字符串起始地址。范例:#include<string.h>main(){chara[30]=”string(1)”;charb[]=”string(2)”;printf(“beforestrnact():%s\n”,a);printf(“afterstrncat():%s\n”,strncat(a,b,6));}執(zhí)行:beforestrnact():string(1)afterstrncat():string(1)string25.strstr(在一字符串中查找指定的字符串)頭文件:#include<string.h>定義函數(shù):char*strstr(constchar*haystack,constchar*needle);函數(shù)說(shuō)明:strstr()會(huì)從字符串haystack中搜尋字符串needle,并將第一次出現(xiàn)的地址返回。返回值:返回指定字符串第一次出現(xiàn)的地址,否則返回0。范例:#include<string.h>main(){char*s=”090123456789”;char*p;p=strstr(s,”901”);printf(“%s\n”,p);}執(zhí)行:9090
26.strtok(分割字符串)頭文件:#include<string.h>定義函數(shù):char*strtok(char*s,constchar*delim);函數(shù)說(shuō)明:strtok()用來(lái)將字符串分割成一個(gè)個(gè)片段。參數(shù)s指向欲分割的字符串,參數(shù)delim則為分割字符串,當(dāng)strtok()在參數(shù)s的字符串中發(fā)現(xiàn)到參數(shù)delim的分割字符時(shí)則會(huì)將該字符改為\0字符。在第一次調(diào)用時(shí),strtok()必需給予參數(shù)s字符串,往后的調(diào)用則將參數(shù)s設(shè)置成NULL。每次調(diào)用成功則返回下一個(gè)分割后的字符串指針。返回值:返回下一個(gè)分割后的字符串指針,如果已無(wú)從分割則返回NULL。在使用時(shí),一定要給字符串長(zhǎng)度,不然運(yùn)行后會(huì)提示段錯(cuò)誤。最簡(jiǎn)單的程序如下:#include<stdio.h>#include<string.h>main(){ chars1[30]="090123456789"; chars2[]="2"; printf("afterstrtok:%s\n",strtok(s1,s2));}06/26/14分割字符終極版(有福利)終極版:可實(shí)現(xiàn)在不知道字符長(zhǎng)度的情況下多次分割字符并輸出。#include<stdio.h>#include<string.h>main(){ chars1[30]="090123456789"; chars2[]="2"; inti=0; char*p; char*a[50]; //定義一個(gè)指針數(shù)組來(lái)存放strtok函數(shù)運(yùn)行后的返回值。 p=strtok(s1,s2); //第一次分割必須要給strtok的第一個(gè)參數(shù)賦值 printf("afterstrtok:%s\n",p); //輸出第一次分割的結(jié)果 while((a[i]=strtok(NULL,s2))!=NULL) //當(dāng)返回值不為NULL時(shí),則還可以繼續(xù)分割,直到返回NULL,用a[i]數(shù)組來(lái)存放每次返回的值 {i++;} //i自加直到不符合while語(yǔ)句條件 intj; //定義一個(gè)整型數(shù)據(jù)j來(lái)控制輸出的次數(shù) for(j=0;j<i;j++) //j控制輸出 printf("%s\n",a[j]);}27.perror(打印出錯(cuò)誤原因信息字符串)頭文件:#include<stdio.h>定義函數(shù):voidperror(constchar*s);函數(shù)說(shuō)明:perror()用來(lái)將上一個(gè)函數(shù)發(fā)生錯(cuò)誤的原因輸出到標(biāo)準(zhǔn)錯(cuò)誤
(stderr)。參數(shù)s所指的字符串會(huì)先打印出,后面再加上錯(cuò)誤原因
字符串。此錯(cuò)誤原因依照全局變量errno的值來(lái)決定要輸出的字符
串。返回值:無(wú)28.strerror(返回錯(cuò)誤原因的描述字符串)頭文件:#include<string.h>定義函數(shù):char*strerror(interrnum);函數(shù)說(shuō)明:strerror()用來(lái)依參數(shù)errnum的錯(cuò)誤代碼來(lái)查詢(xún)其錯(cuò)誤原因的描述
字符串,然后將該字符串指針?lè)祷亍7祷刂担悍祷孛枋鲥e(cuò)誤原因的字符串指針。范例:/*顯示錯(cuò)誤代碼0至9的錯(cuò)誤原因描述*/#include<string.h>//strerror函數(shù)已經(jīng)把所有的錯(cuò)誤都列出來(lái)并且已經(jīng)編好號(hào)碼,范圍為0~132,在調(diào)用時(shí)根據(jù)錯(cuò)誤的代號(hào)把錯(cuò)誤類(lèi)型輸出。main(){inti;for(i=0;i<10;i++)printf(“%d:%s\n”,i,strerror(i));}//這個(gè)程序只是把0到9號(hào)對(duì)應(yīng)的錯(cuò)誤類(lèi)型打出來(lái),我們?cè)谶\(yùn)行時(shí)并不知道錯(cuò)誤的類(lèi)型,這時(shí)候就要用到errno函數(shù),errno相當(dāng)于一個(gè)寄存器,用于存放錯(cuò)誤類(lèi)型的返回值,可見(jiàn)chmod等函數(shù)。執(zhí)行:0:Success1:Operationnotpermitted2:Nosuchfileordirectory3:Nosuchprocess4:Interruptedsystemcall5:Input/outputerror6:Nosuchdeviceoraddress7:Argumentlisttoolong8:Execformaterror9:Badfiledescriptor06/26/14正確使用strerror的代碼#include<stdio.h>#include<string.h>#include<errno.h>//調(diào)用errno函數(shù)時(shí)要用到的頭文件main(){ inta; a=chmod("/home/administrator/aa/ne.c",00777);//此處路徑寫(xiě)了一個(gè)不存在的文件。故返回值應(yīng)該是錯(cuò)誤的,且應(yīng)該存在errno中。 if(a<0) {printf("改變文件權(quán)限失敗\n");} else {printf("改變文件權(quán)限成功\n");} printf("%d:%s\n",errno,strerror(errno));//從errno中讀取錯(cuò)誤類(lèi)型并輸出錯(cuò)誤原因.}29.getpid(取得進(jìn)程識(shí)別碼)頭文件:#include<unistd.h>定義函數(shù):pid_tgetpid(void);函數(shù)說(shuō)明:getpid()用來(lái)取得目前進(jìn)程的進(jìn)程識(shí)別碼,許多程序利用取到的
此值來(lái)建立臨時(shí)文件,以避免臨時(shí)文件相同帶來(lái)的問(wèn)題。返回值:目前進(jìn)程的進(jìn)程識(shí)別碼范例:#include<unistd.h>main(){printf(“pid=%d\n”,getpid());}執(zhí)行:pid=3325/*每次執(zhí)行結(jié)果都不一定相同*/30.getppid(取得父進(jìn)程的進(jìn)程識(shí)別碼)頭文件:#include<unistd.h>定義函數(shù):pid_tgetppid(void);函數(shù)說(shuō)明:getppid()用來(lái)取得目前進(jìn)程的父進(jìn)程識(shí)別碼。返回值:目前進(jìn)程的父進(jìn)程識(shí)別碼。范例:#include<unistd.h>main(){printf(“Myparent‘pid=%d\n”,getppid());}執(zhí)行:Myparent‘pid=218331.sleep(讓進(jìn)程暫停執(zhí)行一段時(shí)間)頭文件:#include<unistd.h>定義函數(shù):unsignedintsleep(unsignedintseconds);函數(shù)說(shuō)明:sleep()會(huì)令目前的進(jìn)程暫停,直到達(dá)到參數(shù)seconds所指定的時(shí)
間,或是被信號(hào)所中斷返回值:若進(jìn)程暫停到參數(shù)seconds所指定的時(shí)間則返回0,若有信號(hào)中斷
則返回剩余秒數(shù)。sleep函數(shù)放在你想要讓他睡眠的函數(shù)的前面,程序是逐條運(yùn)行的,先運(yùn)行sleep函數(shù),在運(yùn)行后面的函數(shù),所以想讓哪個(gè)程序暫停一段時(shí)間在運(yùn)行就把sleep函數(shù)放到那段程序前面。32.wait(等待子進(jìn)程中斷或結(jié)束)頭文件:#include<sys/types.h>#include<sys/wait.h>定義函數(shù):pid_twait(int*status);函數(shù)說(shuō)明:wait()會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行,直到有信號(hào)來(lái)到或子進(jìn)程結(jié)
束。如果在調(diào)用wait()時(shí)子進(jìn)程已經(jīng)結(jié)束,則wait()會(huì)立即返
回子進(jìn)程結(jié)束狀態(tài)值。子進(jìn)程的結(jié)束狀態(tài)值會(huì)由參數(shù)status返回,
而子進(jìn)程的進(jìn)程識(shí)別碼也會(huì)一快返回。如果不在意結(jié)束狀態(tài)值,則
參數(shù)status可以設(shè)成NULL。子
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)玻璃筒燈數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 摩托車(chē)合同模板
- 中國(guó)早期文明聚落形態(tài)研究-深度研究
- 2025年度花卉綠植租賃與生態(tài)環(huán)保宣傳教育合同
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)合伙人退伙合同樣本
- 2025年度裝飾公司員工勞動(dòng)合同糾紛處理指引
- 二零二五年度物流項(xiàng)目融資合作合同樣本
- 2025年度財(cái)務(wù)人員聘用及財(cái)務(wù)報(bào)表審計(jì)合同
- 2025年度航空航天器制造用工合同
- 2025年度健康管理中心臨時(shí)銷(xiāo)售助理合同
- 期中測(cè)試卷-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 新教材人教版高中物理選擇性必修第三冊(cè)全冊(cè)各章節(jié)知識(shí)點(diǎn)考點(diǎn)
- CJT 354-2010 城市軌道交通車(chē)輛空調(diào)、采暖及通風(fēng)裝置技術(shù)條件
- 暑假作業(yè) 11 高二英語(yǔ)語(yǔ)法填空20篇(原卷版)-【暑假分層作業(yè)】2024年高二英語(yǔ)暑假培優(yōu)練(人教版2019)
- 2024年江西省南昌市南昌縣中考一模數(shù)學(xué)試題(含解析)
- 繪本的分鏡設(shè)計(jì)-分鏡的編排
- 查干淖爾一號(hào)井環(huán)評(píng)
- 體檢中心分析報(bào)告
- 人教版初中英語(yǔ)七八九全部單詞(打印版)
- 最高人民法院婚姻法司法解釋?zhuān)ǘ┑睦斫馀c適用
- 關(guān)于醫(yī)保應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論