版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1簡(jiǎn)述C程序的內(nèi)存空間布局。1)指出代碼、數(shù)據(jù)、堆和棧幾個(gè)局部,2)并能指出每個(gè)局部的作用。答:高地址)命令行參數(shù)和J環(huán)境變量低地址未初始化的數(shù)據(jù)初始化的數(shù)據(jù)正文高地址)命令行參數(shù)和J環(huán)境變量低地址未初始化的數(shù)據(jù)初始化的數(shù)據(jù)正文由exec初J始化為0由exec從程序,文件中讀入棧:由編譯器自動(dòng)分配釋放管理。局部變量及每次函數(shù)調(diào)用時(shí)返回地址、以及調(diào)用者 的環(huán)境 信息(例如某些機(jī)器寄存器)都存放在棧中。新被調(diào)用的函數(shù)在棧上為其自動(dòng)和臨時(shí)變量 分配存儲(chǔ)空間。通過(guò)以這種方式使用棧,C函數(shù)可以遞歸調(diào)用。遞歸函數(shù)每次調(diào)用自身 時(shí),就使用一個(gè)新的棧幀,因此一個(gè)函數(shù)調(diào)用實(shí)例中的變量集不會(huì)影響另一個(gè)函數(shù)調(diào)用實(shí)
2、例中的變量。局部變量b.函數(shù)調(diào)用時(shí)返回地址c,調(diào)用者的環(huán)境信息(例如某些機(jī)器寄存器)堆:需要由程序員分配釋放管理,假設(shè)程序員不釋放,程序結(jié)束時(shí)可能由OS回收。通常在堆中 進(jìn)行動(dòng)態(tài)存儲(chǔ)分配。如程序中的malloc,calloc, realloc等函數(shù)都從這里面分配。堆是從 下向上分配的。非初始化數(shù)據(jù)段:通常將此段稱為bss段,這一名稱來(lái)源于早期匯編程序的一個(gè)操作符,意思是block started by symbol (由符號(hào)開始的塊),未初始化的全局變量和靜態(tài)變量存放在這里。在程序開始執(zhí)行之前,內(nèi)核將此段初始化為0。函數(shù)外的說(shuō)明:long sum1000;使此變 量存放在非初始化數(shù)據(jù)段中。a.
3、未初始化的全局變量b,未初始化的靜態(tài)變量初始化的數(shù)據(jù):通常將此段稱為數(shù)據(jù)段,它包含了程序中需賦初值的變量。初始化的全局變量和靜態(tài)變量 存放在這里。例如,C程序中任何函數(shù)之外的說(shuō)明:int maxcount = 99;使此變量以初值 存放在初始化數(shù)據(jù)段中。a ,初始化的全局變量b ,初始化的靜態(tài)變量正文段:CPU執(zhí)行的機(jī)器指令局部。通常,正文段是可共享的,所以即使是經(jīng)常環(huán)境指針環(huán)境表 環(huán)境字符串執(zhí)行的程序(如文本編輯程序、C編譯程序、she II等)在存儲(chǔ)器中也只需有 一個(gè)副本,另外,正文段常常是只讀的,以防止程序由于意外事故而修改其自身的指令。 2簡(jiǎn)述文件權(quán)限中的s位(setuid位)的作用。
4、答:保存的設(shè)置用戶ID (setuid)和保存的設(shè)置組ID (setgid)在執(zhí)行一個(gè)程序時(shí)包含了有 效用戶ID和有效組ID的副本。如果設(shè)置了設(shè)置用戶ID位,那么進(jìn)程在執(zhí)行該程序時(shí)就具有該程序所有者的權(quán)限(進(jìn)程 的有效用戶ID設(shè)置為程序所有者用戶ID),如果設(shè)置了設(shè)置組ID位,那么進(jìn)程在執(zhí)行該程序 時(shí)就具有該程序的組所有組的權(quán)限(進(jìn)程的有效組ID設(shè)置為程序組所有者ID)。設(shè)置用戶 ID位和設(shè)置組ID位都包含在st_mode值中。3請(qǐng)寫一段shell程序,完成以下功能:將a.txt, b.txt, c.txt三個(gè)文本文件合并,并剔除其中的 重復(fù)行,將結(jié)果輸出到d.txt文件中。1)用cat讀出3
5、個(gè)文件,2)用sort將這些進(jìn)行排序,3)剔除其中的空行。答:cat a.txt,b.txt,c.txtd.txtsort -u d.txtsed -i 7A*$/d5 d.txt4. Apache web服務(wù)器能夠?qū)崿F(xiàn)個(gè)人主頁(yè)的功能(即讓apache進(jìn)程能訪問(wèn)每個(gè)用戶的主目錄 下的publichtml目錄)假設(shè)Apache進(jìn)程以apache用戶的身份執(zhí)行,每個(gè)用戶的主目錄的所有 者都為各自用戶。請(qǐng)問(wèn),怎樣設(shè)置每個(gè)用戶的主目錄和public_html目錄的讀寫權(quán)限,才能讓 Apache進(jìn)程能順利讀取,同時(shí)也保證各個(gè)用戶的主目錄不能被其他用戶訪問(wèn)? 1)如何設(shè)定目錄的所有組,2)如何設(shè)定目錄的權(quán)
6、限,3)解釋原因。答:文件和目錄的權(quán)限表示,是用rwx這三個(gè)字符來(lái)代表所有者、用戶組和其他用戶的權(quán)限。有時(shí)候,字符似乎過(guò)于麻煩,因此還有另外一種方法是以數(shù)字來(lái)表示權(quán)限,而且僅需三個(gè)數(shù) 字。r:對(duì)應(yīng)數(shù)值4, w:對(duì)應(yīng)數(shù)值2, x:對(duì)應(yīng)數(shù)值1,-:對(duì)應(yīng)數(shù)值0。加入想一次修改某個(gè)目錄下所有文件的權(quán)限,包括子目錄中的文件權(quán)限也要修改,要使用 參數(shù)一R表示啟動(dòng)遞歸處理。rootlocalhost -J# ch mod 660 /home/user 注:僅把/home/iiser 目錄的權(quán)限設(shè)置為 rwxrwxrwx rootlocalhost # chmod -R 660 /home/public_ht
7、ml 注:表示將整個(gè)/home/user 目錄與其中的 文件和子目錄的權(quán)限都設(shè)置為rwxrwxrwxo文件與目錄不僅可以改變權(quán)限,其所有權(quán)及所屬用戶組也能修改,和設(shè)置權(quán)限類似,用戶 可以通過(guò)圖形界面來(lái)設(shè)置,或執(zhí)行chown命令來(lái)修改。要改變所屬組,可使用下面命令:rootlocalhost # chown :users /home/public_htmlorootlocalhost # chown :users /home/users o5在編寫守護(hù)進(jìn)程是,常使用兩次調(diào)用fork系統(tǒng)調(diào)用的方法來(lái)產(chǎn)生子進(jìn)程,因 為這樣能防止產(chǎn)生僵死進(jìn)程。請(qǐng)寫出相應(yīng)的程序代碼,并解釋其原因。答:#include#
8、include#include I#include#includeI7void daemonize(const char *cmd)intpid_t pid;structrlimitrl;structsigaction sa;14.14.I1516.1722I23-3637.38I3914.I14.I1516.1722I23-3637.38I39/get maximum number of file descriptors if(getrlimit(RLIMIT_NOFILE,&rl) 0) perror(getlimit);return;)/become a session leader t
9、o lose controlling TTYif(pid = fork() 0) exit(0);)setsid();/ensure future opens wont allocate controlling TTYs sa.sa_handler = SIG_IGN;sigemptyset(&sa.sa_mask);sa.sa_flags = 0;if(sigaction(SIGHUP, &sa, NULL) 0) perror(sigaction);return;if(pid = fork。) 0)exit(0);)/change the current working dir to th
10、e rootif(chdir(7) 0)perror(chdir);return;)/close all open file descriptorsif(rl.rlim_max = RLIM_INFINITY)rl.rlim_max = 1024;for(i=0; i unexpected file descriptors %d %d %cT,fdl, fd2);exit(l);int main(void)daemonize(dtest);while(l)sleep(l);)6有哪些方法可以讓一個(gè)進(jìn)程在會(huì)話退出后仍能在后臺(tái)可靠運(yùn)行?請(qǐng)寫出兩種方法,并解釋原理。hohup 2) setsid 3
11、) screen 4)解釋原因。答:在Linux/Unix中,有這樣幾個(gè)概念:進(jìn)程組(process group): 一個(gè)或多個(gè)進(jìn)程的集合,每一個(gè)進(jìn)程組有唯一一個(gè)進(jìn)程組 ID,即進(jìn)程組長(zhǎng)進(jìn)程的ID。會(huì)話期(session): 一個(gè)或多個(gè)進(jìn)程組的集合,有唯一一個(gè)會(huì)話期首進(jìn)程(session leader)o會(huì)話期ID為首進(jìn)程的ID。會(huì)話期可以有一個(gè)單獨(dú)的控制終端(controlling terminal)o與控制終端連接的會(huì)話期 首進(jìn)程叫做控制進(jìn)程(controllingprocess)。當(dāng)前與終端交互的進(jìn)程稱為前臺(tái)進(jìn)程組。其余 進(jìn)程組稱為后臺(tái)進(jìn)程組。掛斷信號(hào)(SIGHUP)默認(rèn)的動(dòng)作是終止程序
12、。當(dāng)終端接口檢測(cè)到網(wǎng)絡(luò)連接斷開,將 掛斷信號(hào)發(fā)送給控制進(jìn)程(會(huì)話期首進(jìn)程)。如果會(huì)話期首進(jìn)程終止,那么該信號(hào)發(fā)送到該 會(huì)話期前臺(tái)進(jìn)程組。一個(gè)進(jìn)程退出導(dǎo)致一個(gè)孤兒進(jìn)程組中產(chǎn)生時(shí),如果任意一個(gè)孤兒進(jìn)程 組進(jìn)程處于STOP狀態(tài),發(fā)送SIGHUP和SIGCONT信號(hào)到該進(jìn)程組中所有進(jìn)程。因此當(dāng)網(wǎng)絡(luò)斷開或終端窗口關(guān)閉后,控制進(jìn)程收到SIGHUP信號(hào)退出,會(huì)導(dǎo)致該會(huì) 話期內(nèi)其他進(jìn)程退出。1)nohup命令運(yùn)行由Command參數(shù)和任何相關(guān)的Arg參數(shù)指定的命令,忽略所有掛 斷(SIGHUP)信號(hào)。在注銷后使用nohup命令運(yùn)行后臺(tái)中的程序。要運(yùn)行后臺(tái)中的nohup 命令,添加& (表示“and”的符號(hào))到
13、命令的尾部。啟動(dòng)作業(yè)的終端被稱為這個(gè)作業(yè)的控制終端。當(dāng)您注銷時(shí),一些shell (缺省情況下不 是bash)將向這些后臺(tái)作業(yè)傳送SIGHUP信號(hào),從而導(dǎo)致這些進(jìn)程退出。為了保護(hù)進(jìn)程以 免產(chǎn)生這種行為,當(dāng)您啟動(dòng)進(jìn)程時(shí),請(qǐng)使用nohup。setsid: .調(diào)用setsid以創(chuàng)立一個(gè)新會(huì)話。使調(diào)用進(jìn)程:a.成為新會(huì)話的首進(jìn)程, b.成為一個(gè)新進(jìn)程組的組長(zhǎng)進(jìn)程,c.沒有控制終端??梢允褂胹etsid命令讓一個(gè)進(jìn)程在新的會(huì)話中運(yùn)行,也就是不再屬于當(dāng)前的 控制終端,當(dāng)終端結(jié)束時(shí),也就不會(huì)收到終端發(fā)來(lái)的SIGHUP信號(hào)。Screen是一個(gè)可以在多個(gè)進(jìn)程之間多路復(fù)用一個(gè)物理終端的窗口管理器。 Screen中有
14、會(huì)話的概念,用戶可以在一個(gè)screen會(huì)話中創(chuàng)立多個(gè)screen窗口, 在每一個(gè)screen窗口中就像操作一個(gè)真實(shí)的telneVSSH連接窗口那樣。不中斷screen窗口中程序的運(yùn)行而暫時(shí)斷開(detach) screen會(huì)話,并在隨后時(shí)間重新連 接(attach)該會(huì)話,重新控制各窗口中運(yùn)行的程序。screen發(fā)送命令使用了特殊的鍵組合C- a。這是因?yàn)槲覀冊(cè)阪I盤上鍵入的信息是直接發(fā)送給當(dāng)前screen窗口,必須用其他方式向screen 窗口管理器發(fā)出命令,默認(rèn)情況下,screen接收以Ca開始的命令。710操作時(shí)返回的錯(cuò)誤代碼EINTR表示什么意思?應(yīng)該如何應(yīng)對(duì)這種情況?答:EINTR錯(cuò)誤
15、的產(chǎn)生:當(dāng)阻塞于某個(gè)慢系統(tǒng)調(diào)用的一個(gè)進(jìn)程捕獲某個(gè)信號(hào)且相應(yīng)信號(hào)處 理函數(shù)返回時(shí),該系統(tǒng)調(diào)用可能返回一個(gè)EINTR錯(cuò)誤。例如:在socket服務(wù)器端,設(shè)置了信號(hào) 捕獲機(jī)制,有子進(jìn)程,當(dāng)在父進(jìn)程阻塞于慢系統(tǒng)調(diào)用時(shí)由父進(jìn)程捕獲到了一個(gè)有效信號(hào)時(shí),內(nèi)核 會(huì)致使accept返回一個(gè)EINTR錯(cuò)誤(被中斷的系統(tǒng)調(diào)用)。1)當(dāng)碰到EINTR錯(cuò)誤的時(shí)候,可以采取有一些可以重啟的系統(tǒng)調(diào)用要進(jìn)行重啟,而對(duì)于有 一些系統(tǒng)調(diào)用是不能夠重啟的。例如:accept、read、write select、和open之類的函數(shù)來(lái)說(shuō), 是可以進(jìn)行重啟的。不過(guò)對(duì)于套接字編程中的connect函數(shù)我們是不能重啟的,假設(shè)connect
16、函數(shù) 返回一個(gè)EINTR錯(cuò)誤的時(shí)候,我們不能再次調(diào)用它,否那么將立即返回一個(gè)錯(cuò)誤。針對(duì)connect 不能重啟的處理方法是,必須調(diào)用select來(lái)等待連接完成。2)有時(shí)候,在調(diào)用系統(tǒng)調(diào)用時(shí),可能會(huì)接收到某個(gè)信號(hào)而導(dǎo)致調(diào)用退出。譬如使用system 調(diào)用某個(gè)命令之后該進(jìn)程會(huì)接收到SIGCHILD信號(hào),然后如果這個(gè)進(jìn)程的線程中有慢系統(tǒng)調(diào)用, 那么接收到該信號(hào)的時(shí)候可能就會(huì)退出,返回EINTR錯(cuò)誤碼。重新定義系統(tǒng)調(diào)用,忽略錯(cuò)誤碼為 EINTR的情況。8請(qǐng)編寫一段c程序,完成以下功能:在父子兩個(gè)進(jìn)程之間通過(guò)共享內(nèi)存段傳遞數(shù)據(jù)。include #include #include #include #in
17、clude include #include #define SHM_FILE shmfileint main(void)key_t key;pid_t pid;int shmid;char* des;char* shmaddr;char str10 = 123456789;II16I1738I16I1738I16I1738)if(shmid = shmget(key, 10, IPC_CREAT|IPC_EXCL|S_IRUSR|S_IWUSR) =-1)perror(shmget);return -1;if ( (pid = fork() shmaddr, 10);)if(shmdt(de
18、s) = -1) perror(shmdt); return -1;)printf(M%snstr);If (shmdt(shmaddr) = -1)Perror(rrshmdt);Return -1;return 0;9 select系統(tǒng)調(diào)用有什么用處,請(qǐng)用一段例如代碼表示,并請(qǐng)闡述原理。答:select。系統(tǒng)調(diào)用可以使進(jìn)程檢測(cè)同時(shí)等待的多個(gè)I/O設(shè)備,當(dāng)沒有設(shè)備準(zhǔn)備好時(shí),select。 阻塞,其中任一設(shè)備準(zhǔn)備好時(shí),select。就返回。int select(int maxfd, fd_set *readfds, fd_set *writefds, fe_set *exceptfds, co
19、nst struct timeval *timeout);select的第一個(gè)參數(shù)是文件描述符集中要被檢測(cè)的比特?cái)?shù),這個(gè)值必須至少比待檢測(cè)的最大文件 描述符大1;參數(shù)readfds指定了被讀監(jiān)控的文件描述符集;參數(shù)writefds指定了被寫監(jiān)控的文 件描述符集;而參數(shù)exceptfds指定了被例外條件監(jiān)控的文件描述符集。參數(shù)timeout起了定時(shí) 器的作用:到了指定的時(shí)間,無(wú)論是否有設(shè)備準(zhǔn)備好,都返回調(diào)用。#include #include #include #include int main(void)char rbuf10;fd_set rd_fds;int retlen;struct timeval tv;tv.tv_sec = 3;tv.tv_usec = 0;I-26.27.28 I-I-26.27.28 FD_SET(STDIN_FILENO,&rd_fds);tv.tv_sec = 3;tv.tv_usec = 0;ret = select(lJ&rd_fdsJNULLJNULLJ&tv);if(ret 0)perror(select);break;else if(ret = 0)printf(timeoutjgoto next loopn);elseprintf(ret = %dn,ret);if(FD_ISSET(STDIN_FILENO,&rd_f
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代建筑裝飾藝術(shù)風(fēng)格演變與趨勢(shì)分析
- 電子商務(wù)供應(yīng)鏈管理策略研究
- 電子商務(wù)如何重塑零售行業(yè)格局
- 2025-2030年堅(jiān)果混合堅(jiān)果脆片禮盒行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年掌上編程技能挑戰(zhàn)賽平臺(tái)企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 2025-2030年戶外帳篷修補(bǔ)工具行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 現(xiàn)代餐飲空間設(shè)計(jì)趨勢(shì)與裝修風(fēng)格
- 2025-2030年復(fù)古風(fēng)格針織床品行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年地道雜糧饅頭連鎖店行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年抗氧化水果飲料行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 2025年大慶職業(yè)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 山東省濟(jì)南市2024-2024學(xué)年高三上學(xué)期1月期末考試 地理 含答案
- 【課件】液體的壓強(qiáng)(課件)-2024-2025學(xué)年人教版物理八年級(jí)下冊(cè)
- 實(shí)施彈性退休制度暫行辦法解讀課件
- 冷凍食品配送售后服務(wù)體系方案
- 發(fā)酵饅頭課件教學(xué)課件
- 《心系國(guó)防 強(qiáng)國(guó)有我》 課件-2024-2025學(xué)年高一上學(xué)期開學(xué)第一課國(guó)防教育主題班會(huì)
- 數(shù)與代數(shù)結(jié)構(gòu)圖
- 曹晶《孫悟空大鬧蟠桃會(huì)》教學(xué)設(shè)計(jì)
- 國(guó)際貿(mào)易進(jìn)出口流程圖
- 玄武巖纖維復(fù)合筋工程案例及反饋情況
評(píng)論
0/150
提交評(píng)論