linux C,一个进程可以操作另外一个进程的fd么,网络编程,超难问题,求高手

leinchu 2012-12-06 05:54:33
linux C,一个进程可以操作另外一个进程的fd么

就是可以用一个程序去读写另外一个/proc/pid/fd下的fd吗?
有办法吗?

我用libevent写的网络服务,一旦我把发送写到独立的线程中,就会出现各种问题;

如果用单线程的话,我并不是收到数据,就马上处理,而是用消息队列存起来交由其它程序(进程)处理,处理好之后用其它的消息队列发回来,由发送线程取到数据之后发送,而且有可能是发送给所有人、部分几个人、单个人,所以,没办法用单线程

我改怎么办?

...全文
552 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
__YY__ 2012-12-07
  • 打赏
  • 举报
回复
引用 5 楼 dongjiawei316 的回复:
引用 4 楼 y1209054881 的回复:一台电脑的通信:一个进程的fd在用,另外的进程要是操作的话,会出现问题的。(进程同时操作的fd前提的是全局变量)再说,进程 同时 操作 fd,fd 也算是个临界资源了。 简直不知所云!一个进程可以访问另一个进程的全局变量???
一个程序里用fork创建进程,在头文件定义一个全局变量怎么不可以? 这也是进程间通信啊
wanghb1989 2012-12-07
  • 打赏
  • 举报
回复
个人觉得不可以,这个fd是进程描述符的数据,如果能改动也是内核做的事情,除非你能操作内核
biegaoshuwoya 2012-12-07
  • 打赏
  • 举报
回复
- - AF_UNIX socket 不是可以传递描述字!
leinchu 2012-12-07
  • 打赏
  • 举报
回复
/proc/pid/fd下的资源实际是网络连接, 我的程序是做个网络聊天(就这么理解吧),所以用户发送个信息上来,可能发送给所有人,也可能是发送给一个人,也可能是多个人, 我用的libevent,测试客户端程序开了3000个线程,不断的连接进来,然后发送三条数据,之后断开,然后再连接…… 如果只是 用户上来消息,就把原文发回给他,没问题,很稳定;但是要根据消息内容不同,可能去发送给多个人,就会出各种问题。 我想请问,这种网络服务程序,一般的结构是怎样的?单线程,收到消息的时候去检查群发、单发的消息,并发送,客户端会觉得反应慢吗? 多线程又怎么做呢?
leinchu 2012-12-07
  • 打赏
  • 举报
回复
引用 2 楼 dongjiawei316 的回复:
1、一个进程是无法操作另一个进程的fd的,因为内存空间不是共享的。 2、楼主一会进程,一会线程,楼主确定自己理解二者的差别吗?
线程包含在进程当中,线程不能独立存在;一个进程至少有一个线程,可以开启多个;进程终止,线程也会停止执行;一个线程(非主线程)终止,不会影响其它线程,除非这个线程出现段错误。 进程之间通讯,可以用消息队列、共享内存、信号量; 我的程序用的是消息队列,收到信息,通过消息队列传给处理的其它进程,其它进程处理完,通过信息队列传回来,由发送线程取到数据之后发送。 因为有可能是发送给所有人、部分几个人、单个人,所以,没办法用单线程。
dongjiawei316 2012-12-07
  • 打赏
  • 举报
回复
引用 4 楼 y1209054881 的回复:
一台电脑的通信:一个进程的fd在用,另外的进程要是操作的话,会出现问题的。(进程同时操作的fd前提的是全局变量)再说,进程 同时 操作 fd,fd 也算是个临界资源了。
简直不知所云!一个进程可以访问另一个进程的全局变量???
__YY__ 2012-12-07
  • 打赏
  • 举报
回复
一个进程操作另外一个进程的fd? 这个分情况吧,是一台电脑,还是不同电脑的通信? 一台电脑的通信:一个进程的fd在用,另外的进程要是操作的话,会出现问题的。(进程同时操作的fd前提的是全局变量)再说,进程 同时 操作 fd,fd 也算是个临界资源了。
dongjiawei316 2012-12-07
  • 打赏
  • 举报
回复
一个线程可以操作其他线程的fd,而一个进程不能操作其他进程的fd。 原因是同一个进程的线程之间,内存是共享的。而不同的进程之间不是。
dongjiawei316 2012-12-07
  • 打赏
  • 举报
回复
1、一个进程是无法操作另一个进程的fd的,因为内存空间不是共享的。 2、楼主一会进程,一会线程,楼主确定自己理解二者的差别吗?
子善旬 2012-12-07
  • 打赏
  • 举报
回复
引用 12 楼 wshn13 的回复:
fork 可以
vfork可以,fork可以么? lz用共享内存,快,方便,用时小心些
赵4老师 2012-12-07
  • 打赏
  • 举报
回复
《Unix编程艺术》
wshn13 2012-12-07
  • 打赏
  • 举报
回复
fork 可以
dongjiawei316 2012-12-07
  • 打赏
  • 举报
回复
引用 7 楼 leinchu 的回复:
/proc/pid/fd下的资源实际是网络连接, 我的程序是做个网络聊天(就这么理解吧),所以用户发送个信息上来,可能发送给所有人,也可能是发送给一个人,也可能是多个人, 我用的libevent,测试客户端程序开了3000个线程,不断的连接进来,然后发送三条数据,之后断开,然后再连接…… 如果只是 用户上来消息,就把原文发回给他,没问题,很稳定;但是要根据消息内容不同,可能去发送给多……
你需要的就是经典的服务器和客户端模型啊!一般的TCP书籍里都有啊!
dongjiawei316 2012-12-07
  • 打赏
  • 举报
回复
这样也不可以,fork是子进程从父进程那里把所有资源复制一份而已。 也就是说父进程里的全局变量,子进程中也有一个同名的。但是这两个同名的全局变量之间并没有一一对应的关系。 反过来说,如果这样也可以,还要进程间通信做什么,要pipe干什么?直接全局变量好了。没听说过全局变量也是进程之间通信的一种

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧