Linux原理與設(shè)計(jì)chap 6 進(jìn)程通信_(tái)第1頁
Linux原理與設(shè)計(jì)chap 6 進(jìn)程通信_(tái)第2頁
Linux原理與設(shè)計(jì)chap 6 進(jìn)程通信_(tái)第3頁
Linux原理與設(shè)計(jì)chap 6 進(jìn)程通信_(tái)第4頁
Linux原理與設(shè)計(jì)chap 6 進(jìn)程通信_(tái)第5頁
已閱讀5頁,還剩273頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、234AT&TBSD初始初始UNIXIPCSystem V IPC基于基于socket IPCPOSIX IPCLinuxIPC傳統(tǒng)進(jìn)程通信傳統(tǒng)進(jìn)程通信5傳統(tǒng)進(jìn)程通信傳統(tǒng)進(jìn)程通信6傳統(tǒng)進(jìn)程通信傳統(tǒng)進(jìn)程通信78信號(hào)通信信號(hào)通信9信號(hào)通信信號(hào)通信101SIGHUP從終端上發(fā)出的結(jié)束信號(hào)從終端上發(fā)出的結(jié)束信號(hào)2SIGINT來自鍵盤的中斷信號(hào)(來自鍵盤的中斷信號(hào)(Ctrl-c)3SIGQUIT來自鍵盤的退出信號(hào)(來自鍵盤的退出信號(hào)(Ctrl-)8SIGFPE浮點(diǎn)異常信號(hào)(例如浮點(diǎn)運(yùn)算溢出)浮點(diǎn)異常信號(hào)(例如浮點(diǎn)運(yùn)算溢出)9SIGKILL終止接收信號(hào)的進(jìn)程終止接收信號(hào)的進(jìn)程14 SIGALRM

2、進(jìn)程的定時(shí)器到期時(shí),發(fā)送該信號(hào)進(jìn)程的定時(shí)器到期時(shí),發(fā)送該信號(hào)15 SIGTERM kill命令發(fā)出的信號(hào)命令發(fā)出的信號(hào)17 SIGCHLD標(biāo)識(shí)子進(jìn)程停止或結(jié)束的信號(hào)標(biāo)識(shí)子進(jìn)程停止或結(jié)束的信號(hào)19 SIGSTOP來自鍵盤來自鍵盤(Ctrl-z)或調(diào)試程序的停止執(zhí)行信號(hào)或調(diào)試程序的停止執(zhí)行信號(hào)信號(hào)通信信號(hào)通信11信號(hào)誕生信號(hào)誕生信號(hào)注冊(cè)信號(hào)注冊(cè)信號(hào)注銷信號(hào)注銷信號(hào)處理函數(shù)執(zhí)行完畢信號(hào)處理函數(shù)執(zhí)行完畢信號(hào)通信信號(hào)通信12信號(hào)通信信號(hào)通信13信號(hào)通信信號(hào)通信14信號(hào)通信信號(hào)通信15信號(hào)通信信號(hào)通信16信號(hào)通信信號(hào)通信17信號(hào)通信信號(hào)通信18信號(hào)通信信號(hào)通信19信號(hào)通信信號(hào)通信20信號(hào)通信信號(hào)通信21信

3、號(hào)通信信號(hào)通信22信號(hào)通信信號(hào)通信23信號(hào)通信信號(hào)通信24信號(hào)通信信號(hào)通信25信號(hào)通信信號(hào)通信26信號(hào)通信信號(hào)通信27信號(hào)通信信號(hào)通信28信號(hào)通信信號(hào)通信29信號(hào)通信信號(hào)通信30信號(hào)通信信號(hào)通信31信號(hào)通信信號(hào)通信32信號(hào)通信信號(hào)通信33u第一個(gè)參數(shù)為信號(hào)值第一個(gè)參數(shù)為信號(hào)值u第二個(gè)參數(shù)是一個(gè)指向第二個(gè)參數(shù)是一個(gè)指向struct struct siginfosiginfo結(jié)構(gòu)的指針結(jié)構(gòu)的指針u第三個(gè)參數(shù)未使用第三個(gè)參數(shù)未使用信號(hào)通信信號(hào)通信34u若不設(shè)置若不設(shè)置SA_SIGINFOSA_SIGINFO,那么即使對(duì),那么即使對(duì)sa_sigactionsa_sigaction指定信號(hào)處指定信號(hào)處理

4、函數(shù),信號(hào)處理函數(shù)理函數(shù),信號(hào)處理函數(shù)也也不能得到信號(hào)傳遞過來的數(shù)據(jù),在不能得到信號(hào)傳遞過來的數(shù)據(jù),在信號(hào)處理函數(shù)中對(duì)這些信息的訪問都將導(dǎo)致信號(hào)處理函數(shù)中對(duì)這些信息的訪問都將導(dǎo)致段錯(cuò)誤段錯(cuò)誤信號(hào)通信信號(hào)通信35信號(hào)通信信號(hào)通信36信號(hào)通信信號(hào)通信37信號(hào)通信信號(hào)通信38信號(hào)通信信號(hào)通信39信號(hào)通信信號(hào)通信40信號(hào)通信信號(hào)通信41信號(hào)通信信號(hào)通信42u常用于檢查常用于檢查pidpid的有效性及當(dāng)前進(jìn)程是否有權(quán)限向目標(biāo)進(jìn)程發(fā)送信號(hào)的有效性及當(dāng)前進(jìn)程是否有權(quán)限向目標(biāo)進(jìn)程發(fā)送信號(hào)信號(hào)通信信號(hào)通信43信號(hào)通信信號(hào)通信44信號(hào)通信信號(hào)通信45信號(hào)通信信號(hào)通信46信號(hào)通信信號(hào)通信47信號(hào)通信信號(hào)通信48信號(hào)

5、通信信號(hào)通信49信號(hào)通信信號(hào)通信50信號(hào)通信信號(hào)通信51u若之前未設(shè)鬧鐘,則返回若之前未設(shè)鬧鐘,則返回0 0信號(hào)通信信號(hào)通信52信號(hào)通信信號(hào)通信53u計(jì)時(shí)到達(dá)將發(fā)送計(jì)時(shí)到達(dá)將發(fā)送SIGPROFSIGPROF信號(hào)給進(jìn)程信號(hào)給進(jìn)程u與與ITIMER_VIRTUALITIMER_VIRTUAL是一對(duì),該定時(shí)器經(jīng)常用來統(tǒng)計(jì)進(jìn)程在用戶態(tài)是一對(duì),該定時(shí)器經(jīng)常用來統(tǒng)計(jì)進(jìn)程在用戶態(tài)和核心態(tài)花費(fèi)的時(shí)間和核心態(tài)花費(fèi)的時(shí)間信號(hào)通信信號(hào)通信54信號(hào)通信信號(hào)通信55信號(hào)通信信號(hào)通信56信號(hào)通信信號(hào)通信57信號(hào)通信信號(hào)通信58信號(hào)通信信號(hào)通信59信號(hào)通信信號(hào)通信60信號(hào)通信信號(hào)通信61信號(hào)通信信號(hào)通信62信號(hào)通信信號(hào)通信

6、63信號(hào)通信信號(hào)通信6465管道通信管道通信66管道通信管道通信 進(jìn)進(jìn)程程 1 file 結(jié)結(jié)構(gòu)構(gòu) f_mode f_pos f_flags f_count f_owner f_inode f_version f_op 進(jìn)進(jìn)程程 2 file 結(jié)結(jié)構(gòu)構(gòu) f_mode f_pos f_flags f_count f_owner f_inode f_version f_op inode 數(shù)數(shù)據(jù)據(jù)頁頁 管管道道寫寫操操作作集集 管管道道讀讀操操作作集集 67管道通信管道通信68管道通信管道通信69管道通信管道通信70管道通信管道通信71管道通信管道通信u但父進(jìn)程使用的所有文件對(duì)象的引用計(jì)數(shù)器的值都會(huì)

7、增加但父進(jìn)程使用的所有文件對(duì)象的引用計(jì)數(shù)器的值都會(huì)增加u因此,即使父進(jìn)程死亡,這個(gè)對(duì)象也不會(huì)被釋放,管道仍然因此,即使父進(jìn)程死亡,這個(gè)對(duì)象也不會(huì)被釋放,管道仍然會(huì)一直打開給子進(jìn)程使用會(huì)一直打開給子進(jìn)程使用 72管道通信管道通信73管道通信管道通信74管道通信管道通信75管道通信管道通信76管道通信管道通信77管道通信管道通信78管道通信管道通信79管道通信管道通信至少有一個(gè)寫進(jìn)程至少有一個(gè)寫進(jìn)程無寫進(jìn)程無寫進(jìn)程阻塞讀阻塞讀非阻塞讀非阻塞讀管道大小管道大小p休眠寫休眠寫非休眠寫非休眠寫p=0拷貝拷貝n個(gè)字節(jié)并返回個(gè)字節(jié)并返回n,當(dāng),當(dāng)緩沖區(qū)為空時(shí)等待數(shù)據(jù)緩沖區(qū)為空時(shí)等待數(shù)據(jù)等待并拷貝數(shù)等待并拷貝

8、數(shù)據(jù),返回大小據(jù),返回大小返回返回EAGAIN返回返回00p=n拷貝拷貝n個(gè)字節(jié)并返回個(gè)字節(jié)并返回n80管道通信管道通信可用緩沖可用緩沖區(qū)大小區(qū)大小u至少有一個(gè)讀進(jìn)程至少有一個(gè)讀進(jìn)程無讀進(jìn)程無讀進(jìn)程阻塞寫阻塞寫非阻塞寫非阻塞寫un4096拷貝拷貝n個(gè)字節(jié)(必要時(shí)等待)并個(gè)字節(jié)(必要時(shí)等待)并返回返回n如果如果u0,就拷貝,就拷貝u個(gè)個(gè)字節(jié)并返回字節(jié)并返回u;否則返;否則返回回-EAGAINu=n拷貝拷貝n個(gè)字節(jié)并返回個(gè)字節(jié)并返回n81管道通信管道通信82管道通信管道通信83管道通信管道通信84管道通信管道通信85管道通信管道通信86管道通信管道通信87管道通信管道通信8889System V

9、IPC進(jìn)程通信進(jìn)程通信90System V IPC進(jìn)程通信進(jìn)程通信u每次分配資源時(shí)增加每次分配資源時(shí)增加1 1,達(dá)到預(yù)定閾值時(shí)重置為,達(dá)到預(yù)定閾值時(shí)重置為0 09192System V IPC進(jìn)程通信進(jìn)程通信93System V IPC進(jìn)程通信進(jìn)程通信/*在使用的最大位置索引在使用的最大位置索引*/*下一個(gè)分配的位置使用序號(hào)下一個(gè)分配的位置使用序號(hào)*/*最大位置使用索引最大位置使用索引*/*指向資源的指向資源的ipc_id_ary數(shù)據(jù)結(jié)構(gòu)的指針數(shù)據(jù)結(jié)構(gòu)的指針*/94System V IPC進(jìn)程通信進(jìn)程通信9596System V IPC進(jìn)程通信進(jìn)程通信97System V IPC進(jìn)程通信進(jìn)程通

10、信98錯(cuò)誤碼錯(cuò)誤碼說明說明EACCESS進(jìn)程沒有適當(dāng)?shù)脑L問權(quán)限進(jìn)程沒有適當(dāng)?shù)脑L問權(quán)限EEXIST進(jìn)程試圖創(chuàng)建一個(gè)和已有關(guān)鍵字相同的進(jìn)程試圖創(chuàng)建一個(gè)和已有關(guān)鍵字相同的IPC資源資源EINVAL在在XXXget()函數(shù)中出現(xiàn)非法參數(shù)函數(shù)中出現(xiàn)非法參數(shù)ENOENT不存在與請(qǐng)求關(guān)鍵字對(duì)應(yīng)的不存在與請(qǐng)求關(guān)鍵字對(duì)應(yīng)的IPC資源,而且資源,而且進(jìn)程沒有請(qǐng)求創(chuàng)建這個(gè)資源進(jìn)程沒有請(qǐng)求創(chuàng)建這個(gè)資源ENOMEM沒有更多的存儲(chǔ)空間供沒有更多的存儲(chǔ)空間供IPC其他的資源使用其他的資源使用ENOSPC已經(jīng)超過了已經(jīng)超過了IPC資源最大數(shù)目的限制資源最大數(shù)目的限制99System V IPC進(jìn)程通信進(jìn)程通信100101消息

11、隊(duì)列消息隊(duì)列102消息隊(duì)列消息隊(duì)列103消息隊(duì)列消息隊(duì)列104消息隊(duì)列消息隊(duì)列105消息隊(duì)列消息隊(duì)列106u若不存在若不存在keykey值的隊(duì)列,則創(chuàng)建;否則,若存在,則打開隊(duì)列值的隊(duì)列,則創(chuàng)建;否則,若存在,則打開隊(duì)列u06660666表示與一般文件權(quán)限一樣表示與一般文件權(quán)限一樣消息隊(duì)列消息隊(duì)列107消息隊(duì)列消息隊(duì)列108消息隊(duì)列消息隊(duì)列109消息隊(duì)列消息隊(duì)列110消息隊(duì)列消息隊(duì)列111umsg_perm.uidmsg_perm.uid,msg_perm.gidmsg_perm.gid,msg_permmsg_perm. .modemode,msg_qbytesmsg_qbytesu該命令只

12、能由下列兩種進(jìn)程執(zhí)行該命令只能由下列兩種進(jìn)程執(zhí)行u這種刪除立即這種刪除立即生效生效消息隊(duì)列消息隊(duì)列112消息隊(duì)列消息隊(duì)列113消息隊(duì)列消息隊(duì)列114消息隊(duì)列消息隊(duì)列115消息隊(duì)列消息隊(duì)列116消息隊(duì)列消息隊(duì)列117118119120121122共享主存共享主存123共享主存共享主存124共享主存共享主存125共享主存共享主存126127共享主存共享主存128共享主存共享主存129共享主存共享主存130共享主存共享主存131共享主存共享主存132共享主存共享主存133共享主存共享主存134共享主存共享主存135共享主存共享主存136共享主存共享主存137共享主存共享主存138u未指定未指定SHM

13、_RNDSHM_RND,附接到,附接到shmaddrshmaddr指定的地址指定的地址u指定指定SHM_RNDSHM_RND,進(jìn)位到最低可用,進(jìn)位到最低可用SHMLBASHMLBA地址地址共享主存共享主存139共享主存共享主存140共享主存共享主存141共享主存共享主存142共享主存共享主存143共享主存共享主存144共享主存共享主存145共享主存共享主存146共享主存共享主存147共享主存共享主存148共享主存共享主存149共享主存共享主存150共享主存共享主存151共享主存共享主存152共享主存共享主存153共享主存共享主存154155u進(jìn)程可睡眠等待進(jìn)程可睡眠等待u也可立即返回也可立即返

14、回信號(hào)量信號(hào)量156信號(hào)量信號(hào)量157信號(hào)量信號(hào)量158信號(hào)量信號(hào)量159信號(hào)量信號(hào)量160信號(hào)量信號(hào)量161信號(hào)量信號(hào)量162信號(hào)量信號(hào)量u將指向?qū)⒅赶騃PCIPC信號(hào)量資源的信號(hào)量資源的sem_undosem_undo的相應(yīng)元素設(shè)為的相應(yīng)元素設(shè)為0 0uIPCIPC信號(hào)量被清除時(shí),每個(gè)信號(hào)量鏈表也被使用,將信號(hào)量被清除時(shí),每個(gè)信號(hào)量鏈表也被使用,將semidsemid字字段設(shè)為段設(shè)為-1-1從而使所有相關(guān)的從而使所有相關(guān)的sem_undosem_undo數(shù)據(jù)結(jié)構(gòu)無效數(shù)據(jù)結(jié)構(gòu)無效163信號(hào)量信號(hào)量164信號(hào)量信號(hào)量165信號(hào)量信號(hào)量166信號(hào)量信號(hào)量167信號(hào)量信號(hào)量168信號(hào)量信號(hào)量169

15、信號(hào)量信號(hào)量170信號(hào)量信號(hào)量171信號(hào)量信號(hào)量172信號(hào)量信號(hào)量173信號(hào)量信號(hào)量174信號(hào)量信號(hào)量175信號(hào)量信號(hào)量176信號(hào)量信號(hào)量177信號(hào)量信號(hào)量struct seminfo int semmap;/信號(hào)集量映射里的記錄數(shù)量信號(hào)集量映射里的記錄數(shù)量 int semmni;/最大信號(hào)量集最大信號(hào)量集 int semmns;/所有信號(hào)量集中的最大信號(hào)量所有信號(hào)量集中的最大信號(hào)量 int semmnu;/最大信號(hào)量撤銷量,未使用最大信號(hào)量撤銷量,未使用 int semmsl;/信號(hào)量集合中可容信號(hào)量數(shù)信號(hào)量集合中可容信號(hào)量數(shù) int semopm;/最大操作數(shù)目,最大操作數(shù)目, int s

16、emume;/進(jìn)程最大撤銷數(shù)目,未使用進(jìn)程最大撤銷數(shù)目,未使用 int semusz;/sem_undo sz int semvmx;/最大信號(hào)量值最大信號(hào)量值 int semaem;/可被用于信號(hào)量調(diào)整的值可被用于信號(hào)量調(diào)整的值178信號(hào)量信號(hào)量179信號(hào)量信號(hào)量180信號(hào)量信號(hào)量181信號(hào)量信號(hào)量182信號(hào)量信號(hào)量183信號(hào)量信號(hào)量184信號(hào)量信號(hào)量185信號(hào)量信號(hào)量186綜合示例綜合示例187綜合示例綜合示例188綜合示例綜合示例189綜合示例綜合示例190綜合示例綜合示例191綜合示例綜合示例192綜合示例綜合示例193綜合示例綜合示例194195Socket通信通信196Socket

17、通信通信197Socket通信通信198Socket通信通信199Socket通信通信200Socket通信通信201Socket通信通信202Socket通信通信203網(wǎng)絡(luò)應(yīng)用網(wǎng)絡(luò)應(yīng)用BSD Socket層層INET Socket層層TCPUDPIPPPPSLIPSocketARPSocket通信通信204Socket通信通信205Socket通信通信206Socket通信通信207Socket通信通信208Socket通信通信209Socket通信通信210Socket通信通信211Socket通信通信212int main()()int sockfd;if (sockfd = socke

18、t(AF_INET, SOCK_STREAM, 0) = -1) perror(“socket”); exit(1); Socket通信通信213Socket通信通信214Socket通信通信215Socket通信通信216Socket通信通信217Socket通信通信218Socket通信通信219struct in_addr _u32 s_addr;Socket通信通信220221Socket通信通信222223Socket通信通信224Socket通信通信225int main() int sockfd, client_fd;struct sockaddr_in remote_addr;

19、/* 客戶端地址信息客戶端地址信息 */ while(1) sin_size = sizeof(struct sockaddr_in); if (client_fd = accept(sockfd, (struct sockaddr *) &remote_addr, &sin_size) = -1) perror(accept); continue; printf(from %sn, inet_ntoa(remote_addr.sin_addr); Socket通信通信226Socket通信通信227Socket通信通信228Socket通信通信229230231232Socket通信通信233Socket通信通信234Socket通信通信235Socket通信通信236Socket通信通信237Socket通信通信238Socket通信通信239240struct hostent char *h_name; /*主機(jī)的正式名稱主機(jī)的正式名稱*/ char *h_aliases; /*主機(jī)的別名主機(jī)的別名*/ int h_addrtype;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論