參考頭面試題_第1頁(yè)
參考頭面試題_第2頁(yè)
參考頭面試題_第3頁(yè)
參考頭面試題_第4頁(yè)
參考頭面試題_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1. printf srandexit()1. printf srandexit() #include<math.h>sleep() #include<dlfcn.h>共享庫(kù)處理dlopen(),dlclose(),dlsym(),dlerror() #include<errno.h>#include<unistd.h> #include<sys/mman.h> mmap(),munmap()#include<fcntl.h>#include#include<sys/stat.h> #include<sys/types.h>mkdir()#include #include<cset>underflow_error("#include<algorithm>#include 3#include<fcntl.h>#include<sys/stat.h> 符號(hào)S_ISSOCK() 符號(hào)S_ISSOCK()UC宏二十一錯(cuò)誤處理標(biāo)準(zhǔn)printf函數(shù)可以負(fù)責(zé)把數(shù)據(jù)顯示在屏幕上,字符需用''括起printf("%d%c",變量名,'變量名'),此變量可替代 printf("%5.2f%5.2lf",1.5f,1.5)5表示輸出占多少個(gè)位置.2表示小數(shù)點(diǎn)后占多少位printf("%g"%lg",1.5f,1.5lf) g會(huì)把小數(shù)點(diǎn)后無(wú)用的0刪掉printf(”0%o“,%p把一個(gè)數(shù)據(jù)的地址以十六進(jìn)制方式顯示,取得的是變量的開(kāi)始地stdout標(biāo)準(zhǔn)輸出 stderr標(biāo)準(zhǔn)scanf可以從鍵盤(pán)上讀取用戶輸入的信息&scanf("%d",&變量名使用scanf函數(shù)可以從鍵盤(pán)上讀到用戶輸入的字符串,遇到空格或回車(chē)結(jié)束。應(yīng)該使的c編譯器中都支持的。intint //intarr[]=跨越整個(gè)一組的數(shù)據(jù),arr[0]+1arr[0]C語(yǔ)言程序中使用兩個(gè)C語(yǔ)言程序中使用兩個(gè)char只讀方式存在的。 gcc在處理時(shí)會(huì)把他用一個(gè)地址處理char*str=charstr[10]=3charstr[10]=gets(strfgets(str,20,stdin)stdin表示鍵盤(pán)這個(gè)文件。這個(gè)函數(shù)不會(huì)造strlen(str)字符串有效字符的長(zhǎng)度,不包含charsprintf(buf,constchar*format,a)strcmp(str,str1)str<str1 str=str1 strstr11strncmp函數(shù)只比較兩個(gè)字符串中的前n個(gè)字符。const關(guān)鍵字表示數(shù)組內(nèi)容不可以被修改。如果在函數(shù)中對(duì)這樣的數(shù)組參數(shù)進(jìn)行了修改typedef 給xyyxtypedef關(guān)鍵字用于給數(shù)據(jù)類(lèi)型起別名,不可以用#definetypedef關(guān)鍵字用于給數(shù)據(jù)類(lèi)型起別名,不可以用#definesizeofexterninta;(不能再次對(duì)其賦值 所以D=d-short(短整2)long(4)int(確定不同編譯器不同unsignedshort(無(wú)符號(hào)短整型float(單精度浮點(diǎn)4)double(雙精度浮點(diǎn)8)char(1) >=(大于等于)<(小于(&按位與|按位或~按為求反^按為異或<<按為左 >>按位右時(shí)補(bǔ)充的是0數(shù)據(jù)類(lèi)型不同結(jié)果不同,按位左移低位補(bǔ)充的是0。后++優(yōu)先級(jí)最低前++優(yōu)先級(jí)最高unsignedchar93=64168+4(首先算出相反數(shù)的二進(jìn)制表示方式,然后對(duì)這個(gè)二進(jìn)制數(shù)字按位求反再加100000000010000000128(最小數(shù))111111111bainliang17(1個(gè)字節(jié)bianliang1314個(gè)字節(jié)charch191,printf("%c",ch);Ach8()?(()printf("%lg",351 如果表達(dá)式中設(shè)計(jì)多種不同類(lèi)型的數(shù)據(jù)則gcc會(huì)把他們調(diào)整成一樣的類(lèi)型后在進(jìn)行計(jì)char->int->unsignedint->float->double以上在運(yùn)算時(shí)會(huì)先把前面的類(lèi)型轉(zhuǎn)換成后面字符串是由一組相連的字符變量構(gòu)成的,最后一個(gè)字符要求是‘\0’?!甛0’malloc(int*p=(int*)malloc(sizeof(int)*num);return0;}p=int*p=(intfree(p;釋放從堆中分配的內(nèi)存。一定要釋放分配后得到的首地空間,free函數(shù)可以把堆中以前分配的內(nèi)存空間釋放掉。pint*)calloc(4,sizeof(in;t));0(int)void*memset(void*sintc,size_tn);將s指向的頭n個(gè)字節(jié)填充成cmemset(p,0,4;清零qsort(shu_zu,變量個(gè)數(shù),變量占空間,比較函數(shù)constvoid*類(lèi)型的指針,其中記錄的地址都是數(shù)組中不同變intcompare(constvoid*p_1,const*p_2){intnum_1=*(int*)p_1;intnum_2=*(int*)p_2;if(num_1<num_2)return1;return0;}文件指針位置在開(kāi)頭,指針加1是第一個(gè)數(shù)據(jù)所在的地址UC/dev/console終端/dev/tty標(biāo)準(zhǔn)輸入(catdev/tty)和標(biāo)準(zhǔn)輸出(ls 空文件linux黑洞catdev/null 函數(shù)用來(lái)打開(kāi)一個(gè)文件,返回一個(gè)文件結(jié)構(gòu)體的地址,如果打開(kāi)失敗“r“只能讀(要求文件已經(jīng)存在)”w“寫(xiě)(如果文件不存在,則會(huì)自動(dòng)創(chuàng)建,存在則先刪除在創(chuàng)建“在三種模式基礎(chǔ)上可以增加符號(hào)”+“w+”rb“,”wb“,”ab“以二進(jìn)制方式打開(kāi)??梢曰鞂?xiě)if(NULL==fp)perror("open(二則返回0否則返回-1(EOF。(三例如:fputc(str【i(四;需要判斷返回EOF時(shí)是讀到末尾還是出錯(cuò)。(五rewind()函數(shù)可以把文件指針調(diào)整到文件的開(kāi)頭。無(wú)返回值,參數(shù)是文件(六(SEEK_SET)開(kāi)SEEK_END文件(七fread(數(shù)組首地址,數(shù)組中每一個(gè)變量的大小,個(gè)數(shù),文件指針(九fwrite(數(shù)組首地址,數(shù)組中每一個(gè)變量的大小,寫(xiě)多少個(gè),文件指針(十(十一、NULLEOF或者新行時(shí)結(jié)束,參數(shù)是字符數(shù)組,個(gè)數(shù),文件指針,注(十二、成功時(shí)返回一個(gè)非負(fù)數(shù),錯(cuò)誤時(shí)返回EOF每個(gè)數(shù)據(jù)間加上一個(gè)空格,所以用fscanf讀字符的時(shí)候會(huì)讀出空格。用格式fscanf(fp,"%d%lf%c",&e,&f,&g)可以(十四、fprintf(FILE*stream,constchar*format,...)這個(gè)函數(shù)可以將格式化的數(shù)據(jù)轉(zhuǎn)換成字符式fscanf(fp,"%d%lf%c",&e,&f,&g)可以UC(一的未被使用的描述符(0,1,2,3)錯(cuò)誤返回-1#includeintopen(constchar*pathname,intintopen(constchar*pathname,intflags,mode_tmode);intcreat(constchar*pathname,mode_tmode);open23個(gè)參數(shù),第三個(gè)參數(shù)在創(chuàng)建文件時(shí)傳入文件的權(quán)限。第一,第三個(gè)參數(shù)(...)僅當(dāng)創(chuàng)建新文件時(shí)才使用,用于指定文件的訪問(wèn)權(quán)限位(permissionbits(0666)flagspermissionbits(0666)flags用于指定文件的打開(kāi)/創(chuàng)建模式,這個(gè)參數(shù)可由以下常量(fcntl.h)通過(guò)邏-1errno如果路徑名指向FIFO/塊文件/I/O設(shè)置為非阻塞模式(nonblocking等待物理I/O結(jié)束后再writereadI/Owrite一個(gè)進(jìn)程同時(shí)打開(kāi)文件的個(gè)數(shù)是有限的,這個(gè)限制通常由limits.h(二close(fd)關(guān)閉文closefildes與其對(duì)應(yīng)文件之間的關(guān)聯(lián)。文件描述符被釋放并能夠重新使用。close調(diào)用成功就返回0,出錯(cuò)就返回-1。(三#includessize_twrite(intfiledes,constvoid*buf,size_twritefiledesnbytesbufnbytes,否則就是出錯(cuò)了。常見(jiàn)的出錯(cuò)原因是磁盤(pán)空間滿了或者超過(guò)了文件(四ssize_tread(intfiledes,void*buf,size_tEOF;-readfiledesnbytesbuf導(dǎo)致讀取到的字節(jié)數(shù)小于nbytes.導(dǎo)致讀取到的字節(jié)數(shù)小于nbytes.10030字節(jié),read30readread0nbytespipeFIFO時(shí),pipeFIFOnbytes(五文件偏移量記錄在內(nèi)核中,它并不會(huì)引起任何I/O操作。(六Dup返回的一定是當(dāng)前可用描述符的最小值,dup2可由第fcntl功int int(七這三個(gè)函數(shù)可以保證緩沖區(qū)和實(shí)際文件系統(tǒng)的數(shù)據(jù)一致。sync將所有修改過(guò)的緩沖區(qū)排入寫(xiě)隊(duì)列,然后就返回,并不等實(shí)際寫(xiě)磁盤(pán),fsync只對(duì)一個(gè)文件,并且等實(shí)際寫(xiě)磁盤(pán)完成才(八intfcntl(intfd,intintfcntl(intfd,intcmd,longintfcntl(intfd,intcmd,structflock*fcntl()主要包括三F_DUPFD(如果復(fù)制的fcntl()主要包括三F_DUPFD(如果復(fù)制的文件描述符已經(jīng)存在,會(huì)用大于等于此的文件描述符,DUP2則直接關(guān)閉)獲得/F_GETFL/F_SETFL(文件的創(chuàng)建標(biāo)識(shí)不包含在內(nèi))3F_SETLKF_SETLKW/F_GETLK避免多個(gè)進(jìn)程同時(shí)操作文件最初:互斥鎖-->讀寫(xiě)鎖(分為讀鎖和寫(xiě)鎖,)F_RDLCK讀鎖可以在多個(gè)進(jìn)程中同時(shí)使用,但是會(huì)鎖定其他進(jìn)程的寫(xiě)F_UNLCKstructflock{short 鎖的類(lèi)short參照點(diǎn)intintl_len;intl_pid;id,GETLK有效,SETLK時(shí)-1即可//-1F_UNLCK,其他不變,如果加不上,把當(dāng)前的鎖放在第三個(gè)參數(shù)中并返回判斷:if(flock.l_pid==- 可加 函數(shù)說(shuō)明參數(shù)fd代表欲設(shè)置的文件描述符.cmd有以下幾種情況數(shù)fd的文件描述符。執(zhí)行成功則返回新復(fù)制的文件描述符。請(qǐng)參考dup2()。F_SETFD設(shè)置新的文件標(biāo)志,新標(biāo)志按第三個(gè)參數(shù)設(shè)置,通常僅用來(lái)設(shè)置FD_CLOEXECexec系列的系統(tǒng)調(diào)用之后關(guān)閉該F_SETFLargO_APPEND、O_NONBLOCK和F_SETFLargO_APPEND、O_NONBLOCK和O_ASYNC位的改變,其他位的改變將不受影響。F_GETLKF_SETLK設(shè)置文件鎖定的狀態(tài)。此時(shí)flcok結(jié)構(gòu)的l_type值必須是F_RDLCK、F_SETLKWF_SETLK作用相同,但是無(wú)法建立鎖定時(shí),此調(diào)用會(huì)一直等到鎖定動(dòng)作成struct{shortintl_type;*鎖定的狀態(tài)off_tl_start;/*鎖定區(qū)域的開(kāi)頭位置*/off_tl_len;/*鎖定區(qū)域的大小*/pid_tl_pid;/*鎖定動(dòng)作的進(jìn)程l_type有三種狀態(tài)F_RDLCK建立一個(gè)供讀取用的鎖定F_WRLCK建立一個(gè)供寫(xiě)入用的鎖定F_UNLCK刪除之前建立的鎖定l_whence也有三種方式:SEEK_SET以文件開(kāi)頭為鎖定的起始位置。SEEK_CUR以目前文件讀寫(xiě)位置為鎖定的起始位置SEEK_END以文件結(jié)尾為鎖定的起始位置。(九statif(s.st_mode&S_IRUSH)statintstat(constchar*path,structstat*buf);intfstat(intfiledes,structstat*buf);intlstat(constchar*path,structstat*buf);structstatls-//inode_IFSOCK_IFSOCK0140000S_IFLNK0120000S_IFREG0100000S_IFBLK0060000S_IFDIR0040000目S_IFCHR0020000S_IFIFO0010000S_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_IRGRP00040S_IWGRP00020S_IXGRP00010S_IROTH00004S_IWOTH00002其他用戶具可寫(xiě)入權(quán)限sys/stat.h中的宏函數(shù):#include管道或FIFOownerhasreadpermissionmaskforgrouppermissionsgrouphasreadgrouphaswritepermissionmaskforpermissionsforothers(notinothershaveothershavereadothershavewritepermission返回值錯(cuò)誤代碼ENOTDIREFAULT參數(shù)buf為無(wú)效指針,指向無(wú)法存在的內(nèi)存空間EACCESS存取文件時(shí)被拒絕ENOMEM(十測(cè)試成功返回0,出錯(cuò)返回-1F_OK有此文件R_OK文件可讀W_OK可寫(xiě)X_OK(十一個(gè)常量(S_IRUSR,S_IWUSR等)中的若干位按位或構(gòu)成的mode_told=(十二更改文件訪問(wèn)權(quán)限,Chmod是在指定文件上操作,fchmod9(十三如果任意id如果任意id參數(shù)為-1,則保持不變(十四(一(int(二如果參數(shù)是”fd“,則結(jié)果為0。(三structtm{inttm_sec;inttm_min;inttm_hour;inttm_mon;inttm_year;inttm_wday;intint/*seconds/*minutes/*hours/*dayofthemonth/*month/*year/*dayoftheweek/*dayintheyear/*daylightsavingtimetime_tmktime(structtm*tm);char*asctime(conststructtm*tm);#include<stdio.h>#include<stdio.h>intzui_da(intge_shu,...)intjie_guo=1<<31,xun_huan=0;va_listcan_shu;//va_list是一種數(shù)據(jù)類(lèi)型);for(xun_huan=0;xun_huan<ge_shu;xun_huan++)intshu_ziva_arg(can_shu,int);//va_argva_list類(lèi)型的,得到參數(shù)賦值給shu_ziif(shu_zi>{jie_guo=}}returnjie_guo;intmain()printf("zui_da(5,4,5,2,7,8)是%d\n",zui_da(5,4,5,2,7,8));//函數(shù)的第一個(gè)參數(shù)是參printf("zui_da(3,9,18,10)是%d\nzui_da(3,918,return}激活啟動(dòng)或超級(jí)管理用戶root來(lái)啟兒進(jìn)程,init俗稱(chēng)孤兒院。psps-ef顯示父進(jìn)程PPID(父進(jìn)程) psps-ef顯示父進(jìn)程PPID(父進(jìn)程) ps-aux所有進(jìn)程LinuxSTAT ORTZ<sW進(jìn)入內(nèi)存交換(2.6開(kāi)始無(wú)效X死掉的進(jìn)程(從來(lái)沒(méi)見(jiàn)過(guò)Ls進(jìn)程的領(lǐng)導(dǎo)者(在它之下有子進(jìn)程ps-aux:ps Unix/Linux進(jìn)程啟動(dòng)過(guò)0進(jìn)程(1,2后結(jié)束)啟動(dòng)121p1(一得父進(jìn)程號(hào),無(wú)參數(shù),用%d接收。(二)(三)su*(四用ifelse分開(kāi)執(zhí)行:ID,子進(jìn)程返回ID,子進(jìn)程返回vfork就是一張白紙,主要配合exec系列函數(shù)使用。vfork的代碼段,數(shù)據(jù)段,堆等等都是新的exec系列函數(shù)不創(chuàng)建子進(jìn)程。exec系列函數(shù)只是用新代碼代替舊代碼,并且從頭開(kāi)的代碼與父進(jìn)程無(wú)關(guān),用vfork+exec系列函數(shù)。exec只是用一個(gè)全新的程序替換了當(dāng)前進(jìn)程的正文、數(shù)據(jù)、堆和棧。有6種不同的exec函數(shù)可供使用intexecl(constchar*path,constchar*arg,...);必須全路徑,NULLintexecv(constchar*path,char*constintexeclp(constchar*file,constchar*arg,...);intexecle(constchar*path,constchar*arg,...,char*constenvp[]);intexecve(constchar*path,constchar*arg[],char*constenvp[]);intexecvp(constchar*file,char*constargv[]);參數(shù)表的傳遞,l表示list,v表示vector.以e結(jié)尾的兩個(gè)函數(shù)可以傳遞一個(gè)指向環(huán)境字符(五WIFEXITED(status=res)若為正常終止子進(jìn)程返回的狀態(tài),則為真,對(duì)于這WIFSIGNALEND(status)若為異常終止進(jìn)程返回的狀態(tài),則為真??蓤?zhí)行WTERMSIG(status)取信號(hào)編()WIFSTOPPED(status)基為當(dāng)前暫停子進(jìn)程的返回狀態(tài),則為真??蓤?zhí)行WSTOPSIG(status),取信號(hào)編(#)WIFCONTINUED(status)(六wait=waitpid(-waitpid在使用時(shí),第一個(gè)參數(shù)如果是-1,代表等待任意一個(gè)子進(jìn)程結(jié)束,而如果是一0pid1,pid2,第二個(gè)參數(shù)用來(lái)wait/waitpid都會(huì)讓父進(jìn)程等待子進(jìn)程的結(jié)束,因此可以取得子進(jìn)程的結(jié)束狀態(tài)和結(jié)束sys/wait.h中定義的宏:WIFEXITED(status)判斷結(jié)束狀態(tài)(是否正常結(jié)束,在正常結(jié)束時(shí),可以用WEXITSTATUS(status)取結(jié)束參數(shù)(exit系列函數(shù)的參數(shù))vfork想窮人家的孩子,占用父進(jìn)程的房子,不復(fù)制任何wait/waitpid像清潔工,可以回收各種子進(jìn)程的資源(一(“day01”(二DIR*opendir(char*)打開(kāi)目錄返回目錄結(jié)構(gòu)的首地址,失敗返回空,使用時(shí)創(chuàng)DIR*diropendir("day01")size;(bufsizeof(buf)buf取,使用時(shí)加(四chdir("day01")進(jìn)入目錄返回-1錯(cuò)誤chdir(“..”)返回上一層目錄最后一個(gè)返回0或者NULLstructdirent/*inodenumber/*offsettothenextdirent/*offsettothenextdirent/*lengthofthisrecord/*typeoffile;notbyallfilesystemtypesunsignedshortunsigned d_name[256];/*filenamestructdirent*entreaddir(dir)使用時(shí)#includeDIR*dir=if(dir==NULL)perror("dir:"),exit(-structdirent*entreaddir(dir);//讀第一個(gè)目錄項(xiàng)printf("%d,%s,%d\n",ent->d_type,ent->d_name,ent->d_off ent=readdir(dir);//持續(xù)向下讀}d_type4代表目錄,8間到(返回0)時(shí)結(jié)束usleep(1)1微秒,以微秒為單位11000timeThe<time.h>headershalldeclarethestructuretm,whichshallincludeatleastthefollowingmembers:structSecondsMinutesHourDayofmonth[1,31].Monthofyear[0,11].Yearssince Dayofweek[0,6](Sunday=0).Dayofyear[0,365].tm_isdstDaylightSavings}structtm*ct=localtime(&cur);time_tcur;structtm*ct=localtime(&cur);time_tcur;structtm*ct=localtime(&cur);intyear=ct->tm_year+1900;intmonth=ct->tm_mon+1;intday=ct->tm_mday;intmin=ct->tm_min;intsec=ct->tm_sec;sprintf(buf,"%4d-%2d-%2d調(diào)用_exit或_Exit._exit()<unistd.h>_Exit()<stdlib.h>UCatexit(atexit(at函數(shù) 和continue(break(段錯(cuò)段錯(cuò)誤、總線錯(cuò)誤、浮點(diǎn)數(shù)例外(/0、crtl+c、ctrl+ 2)kill-l查看信號(hào)的宏34以后的都是可靠信號(hào)(Unix48個(gè)信號(hào),Linux64個(gè)(非連續(xù)信號(hào)集就是一個(gè)sigset_t類(lèi)型的變量(longlongint64位(C最長(zhǎng)sigset_t(128*8位)類(lèi)型的變量(超大的整數(shù)一定是0另外一個(gè)進(jìn)程發(fā)送信號(hào)。 處理,不可靠信號(hào)只處理一次鍵盤(pán)快捷鍵:ctrl+c2ctrl3ctrl+z段錯(cuò)誤:11(SIGSEGV)7(SIGBUS)08kill命令發(fā)送(全部都能發(fā))kill(全部都能發(fā)kill函數(shù)/raise函數(shù)/alarm函數(shù)/sigqueue函數(shù)(一#includetypedef#includetypedefvoidsighandler_tsignal(intsignumsighandler_thandler(函數(shù)指針signum指的是信號(hào)名稱(chēng),可用數(shù)字表示,handler指定信號(hào)的處理方式,SIG_IGN(忽略),SIG_DFL(默認(rèn),程序員定義的函數(shù)指針(二(三raise()信號(hào)發(fā)送函數(shù),自己給自己發(fā)送(四(五 );intsigfillset(sigset_t*set);把所有信號(hào)集的比特位設(shè)為1: 2+3+5=00010110 是幾就是第幾位為1intsigaddset(sigset_t*set,int(八intsigdelset(sigset_t*set,int(九intsigismember(constsigset_t*set,int執(zhí)行成功則返回0,如果有錯(cuò)誤則返回-1(十sigprocmask(inthow,sigset_t*newset,sigset_t*oldset),成功返回0,失敗返回-1,使用前newset,newset是新的信號(hào)屏蔽集,oldset是返回以前的信號(hào)屏蔽信號(hào)屏蔽集,oldset傳NULL即可。SIG_BLOCK原來(lái)的 abc+cde- abc-cde->直接等于 cde->(十一sigset_tpend;f("信號(hào)2來(lái)過(guò)");}有(十一sigset_tpend;f("信號(hào)2來(lái)過(guò)");}有兩種處理函數(shù)的格式種比較簡(jiǎn)sigaction結(jié)構(gòu)體中的sa_hander函數(shù)指針,不信號(hào)的信息存入siginfo——t結(jié)構(gòu)體中,這種方式需要把sa_flags設(shè)置成SA_SIGINFO.intsigaction(intsignum,conststructsigaction*act,structsigactionSIGSTOPoldact為NULL時(shí)不保存。structsigactionsa_flagssigset_tsa_mask;sa_mask信號(hào)屏蔽字,當(dāng)執(zhí)sa_handler信號(hào)處理函數(shù)sa_masksa_flags;sa_flags用來(lái)改變信號(hào)處理時(shí)的行為。sa_flags包含 obsolete*/}siginfo_t/*Signalnumber*//*Anerrnovalue*//*Signalcode/*Trapnumberthatcaused(unusedonmostarchitectures)/*SendingprocessID*//*RealuserIDofsendingprocess/*Exitvalueorsignal*//*Usertimeconsumed/*Systemtimeconsumed/*Signalvalue*/sigval_t/*POSIX.1bsignal/*POSIX.1bsignal/*POSIX.1bsignal/*Timeroverruncount;POSIX.1btimers/*TimerID;POSIX.1btimers/*Memorylocationwhichcausedfault/*Bandevent(wasintglibc2.3.2andearlier)/*Filedescriptorsi_addr_lsb;/*Leastsignificantbitof(sincekernel2.6.32)}SA_ONESHOT第一次調(diào)用處理函數(shù)后改為默SA_NOMASK信號(hào)處理時(shí)不屏蔽相同的信號(hào)(系統(tǒng)默認(rèn)屏蔽SA_SIGINFO使用第二個(gè)信號(hào)處理函sa_sigactionsa_flagsSA_SIGINFO時(shí)才會(huì)被調(diào)用,0handlerlinux內(nèi)核默認(rèn)調(diào)用sa_handler。siginfo_t包含了信號(hào)產(chǎn)生的原因。(十三sigqueuesigqueue以si_value成員中。intsigqueue(pid_tpidintsig,constunionsigvalvalue);pidsigunionsigvalvoid十六-E預(yù)處理,可以結(jié)合-o生成-c編譯不連接生成-o指定目標(biāo)文件-g生成調(diào)試信-Wall生成盡可能多的警告信息(編譯時(shí)帶上-S匯編,生成-v版.a.so.a.so共享對(duì)象庫(kù)(動(dòng)態(tài)庫(kù)-pedantic產(chǎn)生警-O -pedantic檢測(cè)不符ANSI/ISOC語(yǔ)言標(biāo)準(zhǔn)的源代碼,使用擴(kuò)展語(yǔ)法的地方將產(chǎn)生警告 生成盡可能多的警告-Werror要求編譯器將警告當(dāng)做錯(cuò)誤進(jìn)行處理gcc-statichello.c 十七pragma#pragma#pragmaGCCdependency#pragmaGCC #pragmaGCCdependency"hello.c"http://hello.c#pragmapack(1)//0,1,2針對(duì)結(jié)構(gòu)體的對(duì)齊和補(bǔ)齊方式#include#pragmaGCCdependency//#pragmaGCCpoisonprintfaddintmain(){intinti;for(i=0;i<200;i++){}return0;}UC/C #endef刪除宏#include#define #if(VERSION<2)"int{return0;}個(gè)參數(shù),使用()#if(VERSION<2)"int{return0;}個(gè)參數(shù),使用() 相當(dāng)于在n兩邊加上雙引號(hào)“n”可以和下邊內(nèi)容配合使用。##可以連接它前后的符號(hào)。#define(n)g_加在n 文件 #ifndef- #ifdef #if#if ZHANBENSHAN1#elif#ifndefREADINT#defineREADINTintreadint();C:查找頭文件,相當(dāng)于-l選項(xiàng)。CC:查找頭文件,相當(dāng)于-l選項(xiàng)。C:查找連接文件,相當(dāng)于-l 1gccI(頭文件所在的目錄)2CPATH3在頭文件中指定路徑#includepwdbash下配置環(huán)境變量exportCPATH=lib exportPATH=.$LIBsh 按照c程序員的習(xí)慣編寫(xiě)的shell $C語(yǔ)言提供了二級(jí)指針變量char**environ對(duì)應(yīng)環(huán)境表的首地址, p*p是字符串**p是字符externchar**environ;char**p=environ;}while}(一(二可以使用(三(三(三(四動(dòng)態(tài)庫(kù): gcc-statichello.c 1)編寫(xiě)源程序(.c文件2)進(jìn)行編gccc生成目標(biāo)文件(.o文件ar-rlib庫(kù)文件名.a 2)編譯調(diào)用程序(不連接)gcctest.o-l庫(kù)文件名(不需要寫(xiě)lib和.a)3》gcctest.ol庫(kù)文件名(myku)L庫(kù)文件路徑(不需要配置環(huán)境變量編譯gcc-c-fpic 生成.o文生成共享庫(kù)文件gcc-shared各種.o 2和3可以整合為一條命令gcc-fpic-sharedadd.c-o寫(xiě)調(diào)用函數(shù)gccc鏈接(不編譯直接鏈接也可以鏈接(不編譯直接鏈接也可以gcctest.olmykuL共享庫(kù)編譯的時(shí)候與靜態(tài)庫(kù)一樣依賴(lài)LIBRARAY_PATH,運(yùn)行的時(shí)候依賴(lài)查找目錄#include*****gcc-(一void*dlopen(constchar*filename,intvoid*handlerdlopen("庫(kù)文件名包含路徑dlopenflag(二chardlerror()NULLchar*error\0在使用dlopen和dlsym之后加上char*error=dlerror();判斷是否出錯(cuò)(三void*dlsym(void*handle,constchar*symbol);double(*fa)(double,double);函數(shù)指針fa=dlsym(handler,"函數(shù)名 //獲取庫(kù)函(四intdlclose(void(五ldconfig ldconfig命令的用途主要是在默認(rèn)搜尋目錄(/lib和/usr/lib)以及動(dòng)態(tài)庫(kù)配置文/etc/ld.so.conf內(nèi)所列的目錄下,搜索出可共享的動(dòng)態(tài)鏈接庫(kù)(格式如前介紹,lib*.so*),進(jìn)而創(chuàng)建出動(dòng)態(tài)裝入程序(ld.so)所需的連接和緩存文件.緩存文件默認(rèn)為/etc/ld.so.cache,此文件保存ldconfig通常在系統(tǒng)啟動(dòng)時(shí)運(yùn)行,而當(dāng)用戶安裝了一個(gè)新的動(dòng)態(tài)鏈接庫(kù)時(shí),就需要手工運(yùn)-v或--verbose用此選項(xiàng)時(shí),ldconfig將顯示正在掃描的目錄及搜索到的動(dòng)態(tài)鏈接庫(kù),還有(2)-n:用此選項(xiàng)時(shí),ldconfig僅掃描命令行指定的目錄,不掃描默認(rèn)目錄(/lib,/usr/lib),也掃描配置文件/etc/ld.so.conf所列的目錄-Nldconfig-Nldconfig不重建緩存文件(/etc/ld.so.cache).若未用-X選項(xiàng),ldconfig照-X:ldconfig不更新文件的連接.若未用-N選項(xiàng),則緩存文件正常更新:-CCACHECACHE,系統(tǒng)默認(rèn)的是/etc/ld.so.cache,此(7)-rROOT:ROOT(chroot函數(shù)實(shí)現(xiàn)的).選擇此項(xiàng)時(shí)系統(tǒng)默認(rèn)的配置文件/etc/ld.so.conf,實(shí)際對(duì)應(yīng)的為ROOT/etc/ld.so.conf.如用-/usr/zzz時(shí),打開(kāi)配置文件/etc/ld.so.conf時(shí),實(shí)際打開(kāi)的是/usr/zzz/etc/ld.so.conf文件.用此選項(xiàng),-l:通常情況下,ldconfig搜索動(dòng)態(tài)鏈接庫(kù)時(shí)將自動(dòng)建立動(dòng)態(tài)鏈接庫(kù)的連接.選擇此項(xiàng)-p或--print-cacheldconfig打印出當(dāng)前緩存文件所保存的所有共享庫(kù)的-cFORMAT--format=FORMAT:此選項(xiàng)用于指定緩存文件所使用的格式,三種:old(老格式),new(新格式)和compat(兼容格式,此為默認(rèn)格式(11)V:ldconfig的版本信息,而后退出.(12)-?--help--usage(六列出共享庫(kù)的依賴(lài)關(guān)系 ldd庫(kù)文件 (七---S盡可能反匯編出源代碼,尤其當(dāng)編譯的時(shí)候指定了-g這種調(diào)試參數(shù)時(shí),效果比較明顯。隱含了-d參數(shù)。--show-raw---prefix-addresses,這將是缺省這--no-show-raw-如果-100代表成功,-1了錯(cuò)誤編號(hào),很多庫(kù)函數(shù)在發(fā)生錯(cuò)誤時(shí),改變errno的值。errno得到異常編號(hào),發(fā)生錯(cuò)誤后會(huì)改變errno的值,但是不能用于判斷,因?yàn)閑rrno(一strerror->error轉(zhuǎn)成對(duì)應(yīng)的描述字符(二perror——>error對(duì)應(yīng)的描述字符串#include<errno.h>(不需要參數(shù)(三printf(“%m”)->直接打印當(dāng)前printf("printf:STL->內(nèi)存自動(dòng)分配和回|C++—| |Unix|Unix—>mmap內(nèi)存映——————————————————————————————————————Unix內(nèi)核的系統(tǒng)調(diào)用kmalloc/vmalloc(系統(tǒng)層|最底層內(nèi)存函數(shù)0~4G0~3G是用戶使用的用戶空間,3~4G是內(nèi)核使用的內(nèi)核空間,一0~3G是用戶使用的用戶空間,3~4G是內(nèi)核使用的內(nèi)核空間,一用time命令可以察看執(zhí)行時(shí)間和系統(tǒng)調(diào)用的時(shí)間。/proc/IDmapscatsize文件名報(bào)告正文段長(zhǎng)度ps 看進(jìn)程mallocdelete0x1000212malloc兩次其實(shí)第二次就不在內(nèi)存映射了,只是分配內(nèi)存。第一次是分配內(nèi)存并下32下32free是用于malloc申請(qǐng)內(nèi)存的釋放,只是把虛擬內(nèi)存地址空間允許再次分配 #include(一(二sbrk分配和釋放空間參數(shù)是大小返回值是首地址sbrkmalloc(33個(gè)內(nèi)存頁(yè))一樣。void*p 當(dāng)前位brk返回值判斷分配是否成功空間,參數(shù)是尾地址,返回值是int末尾指針指pstr,返回0分配成功,返回-1分配失敗sbrk結(jié)合使用void*p=brk(p+4)brk(p+4)brk(p+8)實(shí)際上就分配了8字節(jié)空間(p是不變的) brk(p)內(nèi)存全部釋放sbrk(0sbrk(4;//if(r==-1)brk(p;//brksbrkUinx/Linux的系統(tǒng)調(diào)用,只能用于size0size0分配內(nèi)存,位置向右移動(dòng)size0intbrkvoid*ptr)主要內(nèi)存的釋放,傳入末尾指針,返回是否成功(-1失敗(三void*mmap(void*addr,size_tlength,intprot,intflags,intfd,off_toffset);4,//分配4個(gè)字節(jié),但其實(shí)映射4kintmunmap(void*addr,size_tvoid*mmap()返回映射區(qū)域的首地址錯(cuò)誤返回-1(void*start(mmap返回值)(指向欲映射的內(nèi)存起始地址)NULL,表示系統(tǒng)自動(dòng)選定size_tlength映射的長(zhǎng)度,是4k的整數(shù)倍intprot映射區(qū)域的保護(hù)方式: 連 方式都是用二進(jìn)制位1表PROT——EXEC可被執(zhí)行PROT——READ可被讀取PROT——WRITE可被寫(xiě)入PROT——NONE不能存取MAP_SHARED允許其他人修改 fd:要映射到內(nèi)存中的文件描if(p 判斷內(nèi)存映射是否失intmunmap(void*start[mmap的返回值],size_t 解除映mmap是一個(gè)系統(tǒng)提供的函數(shù),用于映射文件或者內(nèi)存,默認(rèn)情況下映射文件,用MAP_ANONYMOUSmmapMAP_PRIVATE或者M(jìn)AP_SHARED其一。解除映射用munmapMAP_SHARED虛擬計(jì)時(shí)器計(jì)算的是程序運(yùn)行在用戶態(tài)時(shí)所消耗的時(shí)間(可認(rèn)為是實(shí)際時(shí)間減掉(系統(tǒng)SIGALRM(真實(shí)),SIGVTALRM(虛擬)和SIGPROF(實(shí)時(shí)(一intgetitimer(intwhich,structitimerval*value);which指定哪個(gè)計(jì)時(shí)器,可選項(xiàng)為如果成功,返回0,否則-1structitimervalstructtimevalit_interval;*nextvalue*/間隔structtimeval/*currentvalue*/structtimevallongtv_sec;/*seconds*//*microseconds*/微(二intsetitimer(intwhich,conststructitimerval*newvalue,structitimerval*oldvalue);which指定哪個(gè)計(jì)時(shí)器,可選項(xiàng)為structitimerval{structtimevalstructitimerval{structtimevalit_interval;/*nextvaluestructtimeval/*currentvaluestructtimevallongtv_sec;/*seconds/*microsecondsfork或exec不允許直接寫(xiě)入/讀取,必須作為讀寫(xiě)的橋梁(必須2個(gè)進(jìn)程一讀一寫(xiě))才能使用intpipe(intfd[2]);fd[0]intpipe(intfd[2]);fd[0]fd[1]ipcsaInterProcess每個(gè)內(nèi)核中的IPC結(jié)構(gòu),都用一個(gè)非負(fù)整數(shù)的標(biāo)識(shí)符加以引用,與文件描述符不同,IPC標(biāo)識(shí)符使用時(shí)會(huì)連續(xù)加1,當(dāng)達(dá)到整數(shù)的最大值時(shí),轉(zhuǎn)回0(當(dāng)達(dá)到最大,加1溢出,回到標(biāo)識(shí)符是IPC對(duì)象的內(nèi)個(gè)進(jìn)程在同一IPC對(duì)象上會(huì)合,需要提供外部名方案,為此使用Key.鍵的數(shù)據(jù)類(lèi)型是基本數(shù)據(jù)類(lèi)型key_t,其實(shí)是在頭文件<sys/types.h>中定義的長(zhǎng)整形。3創(chuàng)建IPC結(jié)構(gòu)ID(0~255)ftok將兩個(gè)key_tftok(constchar*path,int只使用id的低8位(0~255(項(xiàng)目編號(hào))兩個(gè)條件,則創(chuàng)建結(jié)構(gòu)Key12key(ftok123456123456shmdt函數(shù)脫解共享存儲(chǔ)(解除映射intshmget(key_tkey,size_tsz,int一個(gè)現(xiàn)存段,則為0 IPC_EXCL已經(jīng)存在返回-void*shmat(intshmid, void*addr,int中的shm_nattch計(jì)數(shù)器加1intshmdt(voidaddrshmat返回的地址。如果成功,shm_mattchcmd參數(shù)定義了如下5種命令,使其在shmid指定的段上IPC_STATshmid_dsbufIPC_SET修改按buf指向結(jié)構(gòu)中的值設(shè)置與此段相關(guān)結(jié)構(gòu)中的下列三個(gè)字段:有效用戶ID等于shm_perm.uidshm_perm.cuid的進(jìn)程 )structstructshmid_dsstructipc_perm/*權(quán)限/*/*/*最后一次解除掛接時(shí)間/*Lastchangetime/*PIDofcreator/*PIDoflastshmat(2)/shmdt(2)/*No.ofcurrentattachesstructipc_perm/*Keysuppliedtoshmget(2)/*EffectiveUIDofowner/*EffectiveGIDofowner/*EffectiveUIDofcreator/*EffectiveGIDofcreator/*Permissions+SHM_DESTandSHM_LOCKEDflags*//*Sequencenumberunsignedshortunsignedshort用msgget()創(chuàng)建/獲取消息隊(duì)用msgsnd/msgrcvintmsgget(key_tkey,intintmsgget(key_tkey,int如果執(zhí)行成功,返回非負(fù)隊(duì)列IDintmsgsnd(intmsgid,constvoid*ptr,size_tsz,intptr指向一個(gè)長(zhǎng)整數(shù),它包含正的消息類(lèi)型,其后緊跟著消息數(shù)據(jù)。比如,發(fā)送的消息是512個(gè)字節(jié),可定義下列結(jié)構(gòu)(自己定義)structlongmtype;消息類(lèi)型,必須flag可以是IPC_NOWAIT,指示消息發(fā)送是否阻塞(消息隊(duì)列滿了默認(rèn)阻塞ssize_tmsgrvc(intmsqid,void*ptrsize_tszlongtype,intflag);prt和sz參數(shù)和發(fā)送相同設(shè)置該標(biāo)志,消息又太長(zhǎng),則出錯(cuò)返回E2BIG(消息仍留在隊(duì)列中)可以指定flag值為IPC_NOWAIT,使用其操作不阻塞。這使得如果沒(méi)有指定類(lèi)型的intmsgctl(intmsqid,intcmd,structmsqid_ds*keyintsemget(key_tkey,intnsems,intnsems是該集合中的信號(hào)量數(shù),如果創(chuàng)建,必需指定,即數(shù)組長(zhǎng)度不創(chuàng)FLAG:IPC_CREAT|0666創(chuàng)建00intsemctl(intsemid,intsemnum,int/*unionsenumunionintval; /*forSETVAL*/設(shè)置計(jì)數(shù)的值,初始值structsemid_ds*buf;/*forIPC_STATIPC_SET*/unsignedshort*array;/*forGETALLSETALL*/}執(zhí)行信號(hào)量集合上的操作數(shù)組,即+1或者-intsemop(intsemid,structsembufsemoparray[],size_tnops);nops指的是數(shù)組長(zhǎng)度structshortsem_op;對(duì)信號(hào)量操作方式。負(fù)數(shù),0,正數(shù)-1或者sembuf結(jié)shortsem_flg;//信號(hào)量的操作標(biāo)記,默認(rèn)為0,組塞,不阻塞IPC——定了undo標(biāo)志(sem_flg成員設(shè)置了SEM_UNDO位),則也從該進(jìn)程的此信號(hào)量中減去structsembufsemop(semid,&buf,1);數(shù)組第一個(gè)元素的地址就是數(shù)組UDPsemop(semid,&buf,1);數(shù)組第一個(gè)元素的地址就是數(shù)組UDP(UserDatagramProtocol)IP(InternetProtocol)http超文本傳輸協(xié)議IOS/OSITransport進(jìn)行數(shù)據(jù)訪問(wèn)->網(wǎng)卡的物理地址(Mac地址)為A/B/C/D四類(lèi)。端口號(hào)是一個(gè)short,范圍是0~65535。端口0~1023的端口一般不直接使 210IP地址:IP地址:IP子網(wǎng)掩碼 子網(wǎng) sockettcp/ip(傳輸層IP->->1intsocket(intdomain,inttype,intprotocol)2domain:AF_LOCAL PF_INETAF_INET PF_INET6AF_INET6 SOCK_STREAM:數(shù)據(jù)SOCK_DGRAM:數(shù)據(jù)從執(zhí)行效率來(lái)說(shuō),UDP更好,從數(shù)據(jù)的完整性說(shuō),TCPstructintsa_family;}structsockaddr_un{intchar}addr.sun_family=AF_UNIX;struct}addr.sun_family=AF_UNIX;structshortsin_port; struct sin_addr;//IP()都是服務(wù)器的}structin_addrunsignedlongaddr.sin_addr.s_addr=inet_addr("95");將字符串轉(zhuǎn)成16進(jìn)制項(xiàng)(僅用于Server)#includeuint32_thtonl(uint32_tuint16_thtons(uint16_tuint32_tntohl(uint32_tuint16_tntohs(uint16_tcsocket和通信地址intreuseaddr1;//bindsockfd,*sockaddr,length)length是sockaddr的長(zhǎng)度intres=bind(sockfd,(struct(和文件的讀寫(xiě)方式一樣22d通信e關(guān)閉TCP一對(duì)多編程步1b準(zhǔn)備網(wǎng)絡(luò)通信地址sockaddr_inc綁定bindintlisten(intsockfd,intqueue_length);產(chǎn)生一個(gè)新的socket描述符來(lái)描述該連接intaccept(intsockfd,structsockaddr_in*addr,intaccept缺省是阻塞函數(shù),阻塞直到有連接請(qǐng)求structsockaddr_intheir_addr; /*用于存儲(chǔ)連接對(duì)方的地址信息*/intsin_size=sizeof(structsockaddr_in);……(依次調(diào)用socket(),bind(),listen()等函數(shù))new_fd=accept(sockfd,&their_addr,&sin_size);f通socketlistenaccept22ssize_trecvfrom(intsockfd,void*buf,size_tlen,intread和accept拼成了一個(gè)send,sendto表示不使用路由(一般不使用recvrecvfromflag=0一般情況下ssize_tsendto(intsockfd,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論