快速业务通道

LINUX进程控制(3)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-18
rlen(szBuf));

  if(iRet<0){

  perror("write fifo fail");

  return -2;

  }

  int iuSec=int(1000*1000*(double(rand())/RAND_MAX));

  usleep(iuSec);

  }

  close(fdFifo);

  return 0;

  }

  //WriteFifo.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

  //ReadFifo.cpp{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{

  #include <stdlib.h>

  #include <sys/types.h>

  #include <sys/stat.h>

  #include <unistd.h>

  #include <stdio.h>

  #include <fcntl.h>

  int main(int argc,char *argv[])

  {

  char szBuf[128];

  int iRet,fdFifo;

  puts("open for reading.");

  fdFifo=open("MyFifo.pip",O_RDONLY);

  if(fdFifo<0){

  perror("open fifo fail");

  return -1;

  }

  puts("begin read\n");

  while(true){

  usleep(int(1000*1000*(double(rand())/RAND_MAX)));

  iRet=read(fdFifo,szBuf,sizeof(szBuf));

  if(iRet<1){

  break;

  }else{

  szBuf[iRet]=0;

  printf("read :%s\n",szBuf);

  }

  }

  close(fdFifo);

  return 0;

  }

  //ReadFifo.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

  5.5. 共享内存

  共享内存也是进程间(进程间不需要有继承关系)交流信息的一种常用手段.

  通常情况下,OS通过内存映射与页交换技术,使进程的内存空间映射到不同的物理内存,这样能保证每个进程运行的独立性,不至于受其它进程的影响.但是,可以通过共享内存的方式,使不同进程的虚拟内存映射到同一块物理内存,这样,一个进程往这块物理内存的更新数据,另外的进程可以立即看到这块物理内存的修改.

  原型:

  #include <sys/types.h>

  #include <sys/ipc.h>

  #include <sys/shm.h>

  key_t ftok(const char *pathname, int proj_id);

  int shmget(key_t key, int size, int shmflg);

  void *shmat(int shmid, const void *shmaddr, int shmflg);

  int shmdt(const void *shmaddr);

  int shmctl(int shmid, int cmd, struct shmid_ds *buf);

  函数ftok用于创建一个关键字,可以用该关键字关联一个共享内存段.

  参数pathname为一个全路径文件名,并且该文件可访问.

  参数proj_id通常传入一非0字符

  通过pathname和proj_id组合可以创建唯一的key

  如果调用成功,返回一关键字,否则返回-1

  函数shmget用于创建或打开一共享内存段,该内存段由函数的第一个参数标识.

  参数key是一个与共享内存段相关联关键字,如果事先已经存在一个与指定关键字关联的共享内存段,则直接返回该内存段的标识.key的值既可以用ftok产生,也可以是IPC_RPIVATE,表示总是创建新的共享内存段;

  参数size指定共享内存段的大小,通常是内存页面大小(当前intel处理器为4k)的倍数;

  参数shmflg是一掩码合成值,可以是访问权限值与(IPC_CREAT或IPC_EXCL)的合成.IPC_CREAT表示如果不存在该内存段,则创建它.IPC_EXCL表示如果该内存段存在,则函数返回失败结果(-1).

  如果调用成功,返回内存段标识,否则返回-1

  函数shmat将共享内存段映射到进程空间的某一地址.

  参数shmid是共享内存段的标识;

  参数shmaddr和shmflg通常为0

  如果调用成功,返回映射后的进程空间地址,否则返回(char *)-1.

  函数shmdt用于将共享内存段与进程空间分离

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号