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

描述字在进程间的传递与共享内存

    来源: 互联网  发布时间:2016-06-11

    本文导语:         小弟正在做一个简单的LINUX聊天室,服务器端有2个进程,父进程进行连接请求的监听,子进程处理监听请求,父进程和子进程间用共享内存进行通信(不是管道哦~)。每当有新连接时,父进程accept,生成s...

       小弟正在做一个简单的LINUX聊天室,服务器端有2个进程,父进程进行连接请求的监听,子进程处理监听请求,父进程和子进程间用共享内存进行通信(不是管道哦~)。每当有新连接时,父进程accept,生成socket描述字,并将此socket描述字写入共享内存中,写完后并不关闭它。子进程从共享内存中读取父进程写入的socket描述字,之后用select进行轮询所有活动socket,读取客户端发来的消息并进行转发。
      现在的问题在于,由于socket描述字是int 类型的,子进程在select的时候并不把它作为socket描述字处理,而只是简单的把它当作整数数据,故而select失败,返回-1。
      在《UNIX网络编程》里,父子进程是通过UNIX域管道进行描述字传输的,但是我就是想用共享内存做,不知道能不能实现呢?如果可以,该怎么做?希望各位高人不令赐教~~


|
当然不行哦!
首先要明白,描述字是进程相关的,比如进程A中clifd = accept(...),假设返回sockfd为5
    但是另外一个进程B中描述字5与这个socket根本就没有关系。
其次《UNIX网络编程》里用的传递描述字的,是需要内核来实现的,大致原理如下。
当发送进程A请求传递描述字fd,接收进程B正在等着读出描述字时:
进程A中,fd是关联到一个socket(或者管道等等)的,内核会为接收进程打
开一个描述字,并关联到相同的socket,然后把描述字返回给进程B。

|
个人理解 不行吧  单传一个 int 文件描述符(套接字)。 fork之前这个文件描述符存在则fork之后父子进程共享文件描述符表 (其实就是文件对象表) 子进程当然也能访问那个 文件对象  但是你这个是父进程fork子进程之后新创建的套接字描述符  单单传一个int值又有什么用呢 现子进程文件对象表根本没有这个东东。。。

传递描述字 一般用sendmsg ioctl 做。。。 一般收到的 int 数值 也跟原来的不一样。。。

|


你进入了一个很囧的情况。
select本身一般不跟多进程共用。
你这样要么多进程就可以搞定,不需要select,就是说,一个连接一个进程。

实在想用的话建议多线程+select。
http://www.cppblog.com/darkdestiny/archive/2009/01/03/71074.html

|

文章不错,现在有个客户的要求让我比较为难。
需要保持上万个TCP连接, 每秒要处理1000个请求(处理时间在500毫秒左右)
原来的程序是用对每个请求fork的,当时没有这么多连接,OS一般也不支持线程。

用fork的方式实在太耗资源了,现在考虑用多进程加多线程。

    
 
 

您可能感兴趣的文章:

  • 求教一个关于子进程与父进程socket描述符的一个问题
  • fork一个子进程后在打开一个文件,如何在子进程中使用这个打开的文件描述符号
  • 关于子进程间共享套接字描述符的问题?
  • 怎么才能提高一个进程能打开的描述符数量
  • 如何查看一个进程中已经打开的文件描述符
  • 父子进程共享文件描述符问题
  • socket 描述符 如何在进程间 传递 ?
  • 如何获取正在运行的进程可以打开的最大文件描述符?
  • fork()后文件描述符复制给子进程吗?
  • LINUX编程关于文件描述符和FILE *指针可否从一个进程传递给另一个进程的问题
  • sco是否支持进程间传描述符?
  • 一句话描述进程与线程最本质的区别
  • 面试问题:描述线程和进程的概念以及它们的区别?
  • fork 创建进程,共享内存,文件描述符问题
  • vfork中多进程间共享描述符的问题
  • UNIX的文件描述符传递问题
  • apue unix环境编程中的传递文件描述符的使用不懂
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 文件描述符的限制?(共享内存)
  • C/C++ 数据类型描述及类型修饰符介绍
  • 文件描述符集fd_set * readfds;书上这样描述数组元素的每一位对应一个文件描述符,第一个元素代表文件描述符0到31,数组第二个元素代表文
  • 每个线程都进行申请文件描述符的操作的话,会不会发生文件描述符申请冲突?
  • CPU如何知道CS寄存器内装的是LDTR指向的描述符表的段选择符还是GDTR指向的描述符表的段选择符呢?
  • TCP连接中创建的监听描述字和已连接描述字(套接字)对应的是同一个套接口么,如果是的话,读写数据时系统怎么区分是哪个套接字的?
  • 关于文件描述符问题
  • 文件描述的回收问题,谢谢
  • 矢量图形描述语言 Asymptote
  • 哪里有ejb部署文件的 dtd描述
  • 文件描述符
  • 请问FILE结构体和文件描述符有什么联系?谢谢
  • XML描述的GUI框架 Gui4j
  • 流程描述图形编辑器 JPEd
  • 中断描述符表(IDT)问题
  • 监视文件和目录文件描述符的问题
  • 请高手指教:段描述符与段页机制的问题
  • 文件描述符的数据结构在哪定义?
  • Linux打开的文件描述符必须手动close吗
  • 文件描述符,文件句柄的区别?
  • 怎样用描述符重新打开文件?
  • 无效的描述符索引,这是什么错误?


  • 站内导航:


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

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

    浙ICP备11055608号-3