linux下c語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信

linux下c語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信

ID:1357696

大?。?4.50 KB

頁數(shù):11頁

時(shí)間:2017-11-10

linux下c語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信_第1頁
linux下c語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信_第2頁
linux下c語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信_第3頁
linux下c語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信_第4頁
linux下c語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信_第5頁
資源描述:

《linux下c語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、linux下C語言編程4-使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信共享內(nèi)存的函數(shù)有以下幾個(gè):(1)intshmget(key_tkey,intsize,intshmflg),開辟或使用一塊共享內(nèi)存。(2)void*shmat(intshmid,constvoid*shmaddr,intshmflg),將參數(shù)shmid所指向的共享內(nèi)存與當(dāng)前進(jìn)程連接。當(dāng)使用某共享內(nèi)存時(shí),需要先使用shmat,達(dá)成連接。(3)intshmdt(constvoid*shmaddr),將先前用shmat連接的共享內(nèi)存與當(dāng)前進(jìn)程解除連接。參數(shù)s

2、hmaddr為shmat返回的共享內(nèi)存的地址。在完成對共享內(nèi)存的使用后,需要使用shmdt解除連接。(4)intshmctl(intshmid,intcmd,structshmid_ds*buf),控制內(nèi)存的操作。當(dāng)cmd為IPC_RMID時(shí),刪除shmid所指的共享內(nèi)存。這些函數(shù)的表頭文件為,其詳細(xì)參數(shù)請去網(wǎng)上搜索。下面給出一個(gè)使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信的例子:進(jìn)程A開辟一塊新的共享內(nèi)存,進(jìn)程B修改這個(gè)共享內(nèi)存,進(jìn)程C打印輸出這個(gè)共享內(nèi)存的內(nèi)容,進(jìn)程D刪除

3、這個(gè)共享內(nèi)存。進(jìn)程BCD運(yùn)行的命令格式為:命令共享內(nèi)存ID,如./output123432。進(jìn)程A代碼如下:intmain(){intshmid;shmid=shmget(IPC_PRIVATE,SIZE,IPC_CREAT

4、0600);if(shmid<0){perror("shmgeterror");exit(1);}printf("createsharedmemoryOK.shmid=%d/n",shmid);return0;}進(jìn)程B代碼如下:intmain(intargc,char*argv[]

5、){intshmid;char*shmaddr;if(argc!=2){perror("argcerror/n");exit(1);}shmid=atoi(argv[1]);shmaddr=(char*)shmat(shmid,NULL,0);if((int)shmaddr==-1){perror("shmaterror./n");exit(1);}strcpy(shmaddr,"hello,world!");shmdt(shmaddr);return0;}進(jìn)程C代碼如下:intmain(intargc

6、,char*argv[]){intshmid;char*shmaddr;if(argc!=2){printf("argcerror/n");exit(1);}shmid=atoi(argv[1]);shmaddr=(char*)shmat(shmid,NULL,0);if((int)shmaddr==-1){perror("shmaterror./n");exit(1);}printf("%s/n",shmaddr);shmdt(shmaddr);return0;}進(jìn)程D代碼如下:intmain(int

7、argc,char*argv[]){intshmid;if(argc!=2){perror("argcerror/n");exit(1);}shmid=atoi(argv[1]);shmctl(shmid,IPC_RMID,NULL);return0;}linux下C語言編程5-多線程編程Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。編寫Linux下的多線程程序,需要使用頭文件pthread.h,編譯需要在后面加-lpthread。關(guān)于多線程,主要有以下幾個(gè)過程:1,創(chuàng)建線程2,各

8、個(gè)線程的執(zhí)行3,等待線程的結(jié)束涉及的線程函數(shù)主要有:1,intpthread_create(pthread_t*restricttidp,constpthread_attr_t*restrictattr,void*(*start_rtn)(void),?void*restrictarg);函數(shù)有4個(gè)參數(shù):第一個(gè)參數(shù)為指向線程標(biāo)識符的指針。第二個(gè)參數(shù)用來設(shè)置線程屬性。第三個(gè)參數(shù)是一個(gè)函數(shù)指針(有關(guān)函數(shù)指針,看這里),指向線程運(yùn)行函數(shù)的起始地址。最后一個(gè)參數(shù)是函數(shù)指針?biāo)枰膮?shù)。注意:pthread_cr

9、eate函數(shù)返回0表示成功。另外如果函數(shù)指針需要多個(gè)參數(shù)的話,就將這些參數(shù)做成某個(gè)結(jié)構(gòu)體,作為第4個(gè)參數(shù)。如果有返回值的話,也可將返回值的指針回寫到第4個(gè)參數(shù)中。2,pthread_join()等待一個(gè)線程的結(jié)束。pthread_exit()用于線程退出,可以指定返回值,以便其他線程通過pthread_join()函數(shù)獲取該線程的返回值。線程的應(yīng)用:并行數(shù)據(jù)庫的查詢假設(shè)我們有3臺計(jì)算機(jī)A,B,C,每臺均安裝PG數(shù)據(jù)庫,通過網(wǎng)絡(luò)連接。我們可以

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。