Linux下進(jìn)程間如何實(shí)現(xiàn)共享內(nèi)存通信_(tái)第1頁(yè)
Linux下進(jìn)程間如何實(shí)現(xiàn)共享內(nèi)存通信_(tái)第2頁(yè)
Linux下進(jìn)程間如何實(shí)現(xiàn)共享內(nèi)存通信_(tái)第3頁(yè)
Linux下進(jìn)程間如何實(shí)現(xiàn)共享內(nèi)存通信_(tái)第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

WordLinux下進(jìn)程間如何實(shí)現(xiàn)共享內(nèi)存通信

這次我們來(lái)講一下(Linux)進(jìn)程(通信)中重要的通信方式:共享內(nèi)存作為L(zhǎng)inux軟件開發(fā)攻城獅,進(jìn)程間通信是必須熟練掌握的重要技能,而共享內(nèi)存是在程序開發(fā)中常用的也是重要的一種進(jìn)程間通信方式。

下面我們就來(lái)聊一聊Linux下進(jìn)程間如何實(shí)現(xiàn)共享內(nèi)存通信,有哪些方式?

1、基本概念

UNIX和Linux

UNIX和Linux是兩種不同的(操作系統(tǒng)),它們的主要區(qū)別在以下幾個(gè)方面:

歷史:UNIX是最早的商業(yè)化操作系統(tǒng)之一,最初由貝爾實(shí)驗(yàn)室開發(fā),而Linux則是由LinusTorvalds于1991年開發(fā)的開源操作系統(tǒng)。源代碼:UNIX的源代碼是私有的,需要購(gòu)買授權(quán)才能使用和修改,而Linux是開源的,任何人都可以自由地訪問(wèn)、使用和修改其源代碼??梢浦残裕河捎赨NIX的代碼是私有的,因此它們?cè)诓煌模ㄓ布┢脚_(tái)之間的可移植性較差。而Linux的源代碼是開放的,因此它可以在多種硬件平臺(tái)上運(yùn)行。發(fā)行版:UNIX有多個(gè)商業(yè)和非商業(yè)版本,如Solaris、(AI)X、HP-UX等,每個(gè)版本都有自己的特點(diǎn)和功能。而Linux則有許多不同的發(fā)行版,如Ubuntu、Debian、RedHat、Fedora等。命令行工具:UNIX和Linux有許多相同的命令行工具和命令,如ls、grep、awk等,但也有一些不同之處??偟膩?lái)說(shuō),UNIX和Linux都是基于UNIX哲學(xué)的操作系統(tǒng),但它們?cè)谠创a、可移植性、發(fā)行版和命令行工具等方面有所不同。

SystemV和POSIX

SystemV和POSIX是兩種不同的操作系統(tǒng)標(biāo)準(zhǔn),它們的區(qū)別在以下幾個(gè)方面:

歷史背景:SystemV最初是由AT">#include#include#include#include#include#defineSHM_SIZE1024//共享內(nèi)存大小intmain(){intshmid;char*shmaddr;chars8Re(ad)Buf[1024]={0};key_tkey=ftok(".",'s');//獲取共享內(nèi)存標(biāo)識(shí)符if(key==-1){perror("ftok");exit(1);}//創(chuàng)建共享內(nèi)存區(qū)域shmid=shmget(key,SHM_SIZE,IPC_CREAT|0666);if(shmid==-1){perror("shmget");exit(1);}//將共享內(nèi)存區(qū)域附加到進(jìn)程地址空間中shmaddr=shmat(shmid,NULL,0);if(shmaddr==(char*)-1){perror("shmat");exit(1);}#if1//在共享內(nèi)存中寫入數(shù)據(jù)strncpy(shmaddr,"Hello,world!",SHM_SIZE);#else//讀數(shù)據(jù)//memcpy(s8ReadBuf,shmaddr,1024);//printf("s8ReadBuf:%s\\n",s8ReadBuf);#endif//分離共享內(nèi)存區(qū)域if(shmdt(shmaddr)==-1){perror("shmdt");exit(1);}return0;}在上面的例程中,我們首先使用ftok()函數(shù)生成一個(gè)key值作為共享內(nèi)存的標(biāo)識(shí)符。然后使用shmget()函數(shù)創(chuàng)建共享內(nèi)存區(qū)域,shmaddr指向共享內(nèi)存區(qū)域的起始地址。最后使用shmdt()函數(shù)分離共享內(nèi)存區(qū)域。

POSIXIPC機(jī)制實(shí)現(xiàn)共享內(nèi)存

以下是一個(gè)使用POSIXIPC機(jī)制實(shí)現(xiàn)共享內(nèi)存的簡(jiǎn)單例程,它展示了如何創(chuàng)建、映射和解除映射共享內(nèi)存區(qū)域。

#include#include#include#include#include#include#defineSHM_SIZE1024//共享內(nèi)存大小#defineSHM_NAME"/myshm"http://共享內(nèi)存名稱intmain(){intfd;char*shmaddr;chars8ReadBuf[1024]={0};constchar*msg="Hello,world!";//創(chuàng)建共享內(nèi)存區(qū)域fd=shm_open(SHM_NAME,O_CREAT|O_RDWR,0666);if(fd==-1){perror("shm_open");exit(1);}//調(diào)整共享內(nèi)存區(qū)域的大小if(ftruncate(fd,SHM_SIZE)==-1){perror("ftruncate");exit(1);}//映射共享內(nèi)存區(qū)域到進(jìn)程地址空間中shmaddr=mmap(NULL,SHM_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);if(shmaddr==MAP_FAILED){perror("mmap");exit(1);}#if1//在共享內(nèi)存中寫入數(shù)據(jù)strncpy(shmaddr,msg,SHM_SIZE);#else//讀數(shù)據(jù)//memcpy(s8ReadBuf,shmaddr,1024);//printf("s8ReadBuf:%s\\n",s8ReadBuf);#endif//解除共享內(nèi)存區(qū)域與進(jìn)程地址空間的映射關(guān)系if(munmap(shmaddr,SHM_SIZE)==-1){perror("munmap");exit(1);}//刪除共享內(nèi)存區(qū)域的文件名并釋放資源if(shm_unlink(SHM_NAME)==-1){perror("shm_unlink");exit(1);}return0;}在上面的例程中,我們使用shm_open()函數(shù)創(chuàng)建一個(gè)共享內(nèi)存區(qū)域,然后使用ftruncate()函數(shù)調(diào)整共享內(nèi)存區(qū)域的大小。接著,我們使用mmap()函數(shù)將共享內(nèi)存區(qū)域映射到進(jìn)程地址空間中,并使用strncpy()函數(shù)在共享內(nèi)存中寫入數(shù)據(jù)。最后,我們使用munmap()函數(shù)解除共享

溫馨提示

  • 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)論