真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

進(jìn)程通信之共享內(nèi)存

共享內(nèi)存是進(jìn)程間通信方式中效率最高的,由內(nèi)核創(chuàng)建,少了兩次拷貝,直接操作共享內(nèi)存。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了前鋒免費(fèi)建站歡迎大家使用!

優(yōu)點(diǎn):高效。

缺點(diǎn):不提供同步與互斥。

 //comm.h
  1 #include
  2 #include
  3 #include
  4 #include
  5 #include
  6 #include
  7 #include
  8 #define _PATH_ "."
  9 #define _PROJ_ID_ 0x757
 10 #define _SIZE_ 4*1024
 11 static int shm(size_t size,int flags);
 12 int creat_shm(size_t size);
 13 int get_shm(size_t size);
 14 void* at_shm(int shm_id);
 15 int dt_shm(const void* shmadd);
 16 int destory_shm(int shm_id);
 //comm.c
  1 #include"comm.h"
  2 static int _shm(size_t  size,int flags)
  3 {
  4     key_t _key=ftok(_PATH_,_PROJ_ID_);
  5     if(_key<0)
  6     {
  7         perror("ftok");
  8         return -1;
  9     }
 10     int shm_id=shmget(_key,size,flags);
 11     if(shm_id<0)
 12     {
 13         perror("shmget");
 14         return -1;
 15     }
 16     return shm_id;
 17 }
 18 int creat_shm(size_t size)
 19 {
 20     return _shm(size,IPC_CREAT|IPC_EXCL|0666);
 21 }
 22 int get_shm(size_t size)
 23 {
 24     return _shm(size,IPC_CREAT);
 25 }
 26 void* at_shm(int shm_id)
 27 {
 28     return shmat(shm_id,NULL,0);
 29 }
 30 int dt_shm(const void* shmadd)
 31 {
 32     return shmdt(shmadd);
 33 }
 34 int destory_shm(int shm_id)
 35 {
 36     if(shmctl(shm_id,IPC_RMID,NULL)<0)
 37     {
 38         perror("shmctl");
 39         return -1;
 40     }
 41     return 0;
 42 }
 //server.c
  1 #include"comm.h"
  2 int main()
  3 {
  4     int shm_id=creat_shm(_SIZE_);
  5     char* buf=(char*)at_shm(shm_id);
  6     //memset(buf,'\0',_SIZE_);
  7     while(1)
  8     {
  9         printf("%s\n",buf);
 10         sleep(1);
 11     }
 12     dt_shm(buf);
 13     destory(buf);
 14 }
 //client.c
  1 #include"comm.h"
  2 int main()
  3 {
  4     int shm_id=get_shm(_SIZE_);
  5     if(shm_id<0)
  6     {
  7         printf("get_shm error\n");
  8         return -1;
  9     }
 10     char* buf=(char*)at_shm(shm_id);
 11     memset(buf,'\0',_SIZE_);
 12     int i=0;
 13     while(i<_SIZE_-1)
 14     {
 15         sleep(1);
 16         buf[i++]='A';
 17     }
 18     dt_shm(buf);
 19     return 0;
 20 }
 //Makefile
  1 .PHONY:all
  2 all:server client
  3 server:server.c comm.c
  4     gcc -o $@ $^
  5 client:client.c comm.c
  6     gcc -o $@ $^
  7 .PHONY:clean
  8 clean:
  9     rm -f server client

實(shí)驗(yàn)結(jié)果:打開兩個(gè)終端

進(jìn)程通信之共享內(nèi)存

進(jìn)程通信之共享內(nèi)存

使用信號量的Makefile

 cp ../2016_4_11/libmysem.a .

 cp ../2016_4_11/comm.h .

 mkdir lib

 

mkdir lib

[lxj@localhost 2016_4_14]$ cd lib

[lxj@localhost lib]$ cp ../comm.h .

[lxj@localhost lib]$ cp ../libmysem.a  .

 1 .PHONY:all
  2 all:server client
  3 server:server.c com.c
  4     gcc -o $@ $^ -I./lib -L./lib -lmysem
  5 client:client.c com.c
  6     gcc -o $@ $^ -I./lib -L./lib -lmysem
  7 .PHONY:clean
  8 clean:
  9     rm -f server client

當(dāng)前標(biāo)題:進(jìn)程通信之共享內(nèi)存
標(biāo)題路徑:http://weahome.cn/article/pgeded.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部