日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux应用编程之共享内存实例

發(fā)布時(shí)間:2023/12/20 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux应用编程之共享内存实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1共享內(nèi)存實(shí)例

01

主要內(nèi)容?? ?

上一小節(jié)小哥跟大家介紹了一下共享內(nèi)存的知識,今天主要是做一個(gè)實(shí)戰(zhàn)的演示,從而更好的理解共享內(nèi)存的原理和實(shí)際應(yīng)用。

02

程序示例? ?

1#include?<stdlib.h>2#include?<stdio.h>3#include?<string.h>4#include?<errno.h>5#include?<unistd.h>6#include?<sys/stat.h>7#include?<sys/types.h>8#include?<sys/ipc.h>9#include?<sys/shm.h> 10 11 12int?main(int?argc,char?**argv) 13{ 14????int?shmid; 15????char?*Send_addr?=?NULL; 16????char?*Recv_addr?=?NULL; 17 18????if(argc?!=?2) 19????{ 20????????printf("Param?Number?over!\n"); 21????????exit(1); 22????} 23 24 25????if((shmid=shmget(IPC_PRIVATE,1024,S_IRUSR|S_IWUSR))==-1) 26????{ 27????????printf("create?share?memory?Fail!\n"); 28????????exit(1); 29????} 30 31 32????if(fork())? 33????{ 34????????Send_addr?=?shmat(shmid,0,0); 35????????memset(Send_addr?,'\0',1024); 36????????printf("Send?string:%s\n",argv[1]); 37????????strncpy(Send_addr?,argv[1],strlen(argv[1])); 38????????wait(NULL); 39????????exit(0); 40????} 41????else????? 42????{ 43????????sleep(1);//?syn?? 44????????Recv_addr?=?shmat(shmid,0,0); 45????????printf("Receive?string:?%s\n",Recv_addr); 46????????exit(0); 47????} 48}

03

實(shí)驗(yàn)現(xiàn)象? ?

04

程序解讀? ?

以上提供的共享內(nèi)存實(shí)例比較簡單,不過可以非常好的理解共享內(nèi)存。首先使用shmget創(chuàng)建一塊共享內(nèi)存,然后通過fork命令創(chuàng)建一個(gè)子進(jìn)程,其中父子進(jìn)程都通過shmat完成用戶空間與共享內(nèi)存的映射,從而分別獲得對應(yīng)的指針Send_addr和Recv_addr。

父進(jìn)程通過使用Send_addr內(nèi)存指針,把程序命令行參數(shù)寫入到內(nèi)存中,而子進(jìn)程通過Recv_addr內(nèi)存指針進(jìn)行訪問獲得父進(jìn)程向共享內(nèi)存中寫入的參數(shù)"1024-4096"字符串。

然而使用fork創(chuàng)建進(jìn)程返回后其父子進(jìn)程執(zhí)行是無序的,同時(shí)訪問共享內(nèi)存的非原子性,所以子進(jìn)程通過使用sleep(1)延時(shí)來使得父子進(jìn)程任務(wù)錯(cuò)開訪問共享內(nèi)存。

2最后

這里小哥就介紹了使用共享內(nèi)存的一些知識點(diǎn),?希望能夠?qū)δ阌袔椭?#xff0c;今天就分享到這里,下期精彩見!

推薦閱讀: 專輯|Linux文章匯總專輯|程序人生專輯|C語言我的知識小密圈 關(guān)注公眾號,后臺回復(fù)「1024」獲取學(xué)習(xí)資料網(wǎng)盤鏈接。 歡迎點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā),在看,您的每一次鼓勵,我都將銘記于心~ 嵌入式Linux微信掃描二維碼,關(guān)注我的公眾號

總結(jié)

以上是生活随笔為你收集整理的Linux应用编程之共享内存实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。