当前位置:  技术问答>linux和unix

unix下通过(共享内存) 进行 (进程间通讯)???

    来源: 互联网  发布时间:2015-01-26

    本文导语:  两个进程间通过共享内存是怎么通讯的?能不能详细说说,并有没有什么相应书籍or资料or例程看看。    小弟新人,先谢谢了! | 以前接触过,不熟,知道大概: 共享内存是System V的进程通...

两个进程间通过共享内存是怎么通讯的?能不能详细说说,并有没有什么相应书籍or资料or例程看看。
   小弟新人,先谢谢了!

|
以前接触过,不熟,知道大概:
共享内存是System V的进程通讯方式之一,大概的过程是
先从内存中开辟出一块,并赋予一个标示符,然后,多个程序之间就可以通过
他进行通讯,需要注意的是,使用这种方式一般需要结合"信号量"来进行管理,防止出现同时写以及死锁(就是典型的供应者/消费者问题)。

|
这是system V的IPC三大法宝之一:
共享虚空间的若干部分,然好通过直接读写来通信。
shmget 建立新的共享存储区
shmdt shmat 分别将之和一个进程空间附加和断开
shmctl 对参数进行控制

****以下是unix的shmget实现的源代码*****************************

shmget()
{
   register struct a {
      key_t key;
      int size,
      shmflg;
   }*uap = (struct a*)u.u_ap;
   register struct shmid_ds *sp;
   int      s;
   int size,ptsize;

   if((sp = ipcget(uap->key,uap->shmflg,shmem,shminfo.shmmni,sizeof(*sp),&s))==NULL)
   return;
  if(s){
     if(uap->sizesize>shminfo.shmmax){
       u.u_error = EINVAL;
     sp->shm_perm.mode = 0;
     return;
 }
 size = btoc(uap->size);
 if(shmtot+size >shminfo.shmall){
   u.u_error = ENOMEM;
   sp->shm_perm.mode = 0;
   return;
}
 sp->shm_segsz =uap->size;
 ptsize = btoc(sizeof(struct pt_entry)*size);
 sp->shm_ptbl = (struct pt_entry *)sptalloc(ptsize,PG_V|PG_KW,0);
 if(sp->shm_ptbl == NULL ||
    memall(sp->shm_ptbl,size)==0)
    u.u_error = ENOMEM;
    sp->shm_perm.mode=0;
    if(sp->shm_perm.mode = 0;
       sptfree(sp->shm_ptbl,ptsize,1);
     return;
}

  maxmem-=(ptsize+size);
  shmtot+=size;

  sp->shm_perm.mode|=SHM_CLEAR;
  sp->shm_nattch = sp->shm_cnattch = 0;
  sp->shm_atime = sp->shm_dtime = 0;
  sp->shm_ctime = time;
  sp->shm_lpid =0;
  sp->shm_cpid =u.u_procp->p_pid;
 }else
     if(uap->size&&uap->sizeshm_segsz){
      u.u_error = EINVAL;
      return;
      }
   u.u_ravl1 = sp->shm_perm.seq*shminfo.shmmni+(sp-shmem);
}

    
 
 

您可能感兴趣的文章:

  • 如何AIX UNIX 主机在进程中通过C编程获取进程名
  • unix进程问题,为什么关了控制界面进程结束了
  • 小妹请教各位大哥,在unix下,如何显示进程,和kill掉进程?
  • unix下用进程名杀进程 报错
  • 用Delphi或VC怎么向unix发送命令来检测进程甚至能够控制进程?
  • unix中有关父进程和子进程的问题
  • 在unix下,后台trf001同时并发了很多进程,请用一条命令,杀掉所有trf001并发的进程
  • 在unix下做webserver,使用多进程?多线程?
  • 发一个关于UNIX进程的帖子
  • unix下异步进程的问题
  • 求救!!!Tru64 Unix如何列出及kill掉后台进程?
  • 在UNIX下怎么做一个判断一个进程是否关闭?
  • Unix 进程 自动 终止的原因
  • Unix下进程间通信有那些比较常用的方法,谁有经验?高分奉送!
  • 请问WINDOWS 和LINUX/UNIX 的进程、线程的区别
  • UNIX进程包括那三个部分?
  • unix 进程杀不掉怎么办?
  • unix 进程状态问题
  • 大讨论:UNIX里“进程通信”和“流”的概念!!!
  • linux/unix里的进程互斥问题 ,有关lockf()函数!
  • unix下如何获得内存信息(内存占有率等)?
  • unix下用什么命令可以统计所有进程的内存
  • hp-unix内存问题
  • 求unix查看cpu和内存的命令(非top)
  • hp-unix的内存清除的问题
  • 【求助】unix下如何进行内存管理?
  • HP-UNIX上的内存问题
  • Unix/linux下如何监测共享内存的使用情况
  • *****什么命令可以看到unix的最小内存分配单位?*****
  • 救命!谁知道怎么查看unix系统的硬件配置?显卡,网卡,软驱,内存?
  • HP Unix 查询系统内存占用情况
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • unix服务器与window98通过两个modem拨号互联的问题?
  • 现在windows98已经通过modem拨号登陆上了unix,但却无法ping通。
  • 如何在UNIX上通过ODBC操纵Oracle等DBMS???
  • UNIX下如何通过并口,驱动打印机打印格式文件
  • 把HTML内嵌FLASH放在UNIX服务器上,用户通过网页能看到FLASH吗?
  • unix环境如何通过shell或java获取windows机器上的csv文件?
  • SCO UNIX如何配置telnet服务可以使windows用户通过telnet登陆?
  • 请问,linux和unix到底有什么区别,可不可以通过安装学习linux来掌握unix的命令等知识?
  • 路由器配置:有一局域网(SCO UNIX 5.0.5)与一台主机(SCO UNIX 5.0.5)通过祯中继联接。路由器(CISCO2610作主节点)在局域的IP为IPa,广
  • Window客户端通过ADO是否能够连接和操作Unix平台下的Oracle数据库?
  • unix文件(包括目录)如何通过刻录机备份到光盘上??
  • 在unix环境下能否通过程序来改变cron的内容?
  • linux或unix中有类似注册表一样的东西吗?如果没有,注册表的功能是通过什么实现的呢?
  • 通过windows前台界面监控unix守护进程与守护运行的日志
  • unix/linux下通过c/c++获取内存大小的方法。
  • Linux/UNIX下,C++程序通过那些步骤访问Oracle或者Sybase SQL数据库?
  • 请问如何使得SCO Unix用Telnet通过TCP/IP访问Novell,还有Novell4.11的Tenlnet服务如何开启?谢谢!
  • 高难Unix问题,为什么不能通过中国网通的宽带联接(ADSL)不能看到我的网站?
  • unix通过crontab 定时启动oracle应用程序??????????
  • 用c++ 写的 hello 程序在unix g++ 编译通过后,运行出错
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • unix/Linux下c++ boost thread库读写锁介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • 没有unix系统我如何学习unix
  • php将unix时间戳转换成字符串时间函数(date)
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • UNIX特急!!!digital unix问题,请专家快来!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3