ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在Linux操作系统中实现内部进程通信(转)

在Linux操作系统中实现内部进程通信(转)

原创 Linux操作系统 作者:BSDLite 时间:2007-08-16 18:07:22 0 删除 编辑
在Linux操作系统中实现内部进程通信(转)[@more@]  Linux给我们提供了丰富的内部进程通信机制,包括共享内存、内存映射文件、先入先出(FIFO)、接口(sockets)以及多种用于同步的标识。在本文中,我们主要讨论一下共享内存和内存映射文件技术。

  一般来说,内部进程通信(interprocess communication)也就是IPC,是指两个或两个以上进程以及两个或者两个以上线程之间进行通信联系。每个IPC机制都有不同的强项或者弱点,不过没有一个IPC机制包含内建的同步方法。因此程序员不但需要自己在程序中实现同步,而且还需要为了利用IPC机制而自己开发通信协议。

  共享内存

  使用共享内存和使用malloc来分配内存区域很相似。使用共享内存的方法是:

  1.对一个进程/线程使用shmget分配内存区域。

  2.使用shmat放置一个或多个进程/线程在共享内存中,你也可以用shmctl来获取信息或者控制共享区域。

  3.使用shmdt从共享区域中分离。

  4.使用shmctl解除分配空间

  下面是个例子:
CODE:
  //建立共享内存区域
  intshared_id;
  char *region;
  const intshm_size = 1024;
  
  shared_id = shmget(IPC_PRIVATE,//保证使用唯一ID
            shm_size,
            IPC_CREAT | IPC_EXCL |//创建一个新的内存区域
            S_IRUSR | S_IWUSR);//使当前用户可以读写这个区域
  
  //交叉进程或生成进程.
  
  //将新建的内存区域放入进程/线程
  region = (char*) shmat(segment_id, 0, 0);
  
  //其他程序代码
  ...
  
  //将各个进程/线程分离出来
  shmdt(region);
  
  //破坏掉共享内存区域
  shmctl(shared_id, IPC_RMID, 0);

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10617542/viewspace-962393/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论