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

fork,select,fd_set是什么关系

    来源: 互联网  发布时间:2016-05-09

    本文导语:  看了UNIX网络编程的书 学会2种处理SOCKET多进程的方法,一个是FORK制造进程,一个是SELECT多路复用,其中用到了FD_SET的描述字符集 那如果我想将SELECT的方法换成FORK,那FD_SET是不是也可以用在FORK里呢? 搞不清这3个之间...

看了UNIX网络编程的书
学会2种处理SOCKET多进程的方法,一个是FORK制造进程,一个是SELECT多路复用,其中用到了FD_SET的描述字符集
那如果我想将SELECT的方法换成FORK,那FD_SET是不是也可以用在FORK里呢?
搞不清这3个之间的关系了,望高手以易懂的方法解释下,谢谢

|
在网上找到了点资料,并发服务器的实现,讲到了多路I/O复用的(是乎网上这方面的资料好少啊),貌似有点理解了,不过还没试过.
下面是我找到的一此资料的一部分内容:

9.4 并发服务器:多路复用I/O 
为了解决创建子进程带来的系统资源消耗,人们又想出了多路复用I/O模型. 
首先介绍一个函数select 
int select(int nfds,fd_set *readfds,fd_set *writefds, 
fd_set *except fds,struct timeval *timeout) 
void FD_SET(int fd,fd_set *fdset) 
void FD_CLR(int fd,fd_set *fdset) 
void FD_ZERO(fd_set *fdset) 
int FD_ISSET(int fd,fd_set *fdset) 
一般的来说当我们在向文件读写时,进程有可能在读写出阻塞,直到一定的条件满足. 比 
如我们从一个套接字读数据时,可能缓冲区里面没有数据可读(通信的对方还没有 发送数 
据过来),这个时候我们的读调用就会等待(阻塞)直到有数据可读.如果我们不 希望阻塞 
,我们的一个选择是用select系统调用. 只要我们设置好select的各个参数,那么当文件 
可以读写的时候select回"通知"我们 说可以读写了. readfds所有要读的文件文件描述 
符的集合 
writefds所有要的写文件文件描述符的集合 
exceptfds其他的服要向我们通知的文件描述符 
timeout超时设置. 
nfds所有我们监控的文件描述符中最大的那一个加1 
在我们调用select时进程会一直阻塞直到以下的一种情况发生. 1)有文件可以读.2)有文 
件可以写.3)超时所设置的时间到. 
为了设置文件描述符我们要使用几个宏. FD_SET将fd加入到fdset 
FD_CLR将fd从fdset里面清除 
FD_ZERO从fdset中清除所有的文件描述符 
FD_ISSET判断fd是否在fdset集合中 
使用select的一个例子 
int use_select(int *readfd,int n) 

fd_set my_readfd; 
int maxfd; 
int i; 
maxfd=readfd[0]; 
for(i=1;imaxfd) maxfd=readfd[i]; 
while(1) 

/* 将所有的文件描述符加入 */ 
FD_ZERO(&my_readfd); 
for(i=0;i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 哪位高手给个unix系统下C语言socket+fork()+select()的例子?
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 一个fork的问题 iis7站长之家
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • fork()函数入门级问题:fork()与进程数
  • 一个fork的问题
  • 新手的问题关于fork?
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • fork() 父子进程执行顺序问题
  • 关于fork创建进程的一个问题
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • fork的问题
  • 请教 linux的fork从什么版本开始支持COW?
  • c++ 和 fork


  • 站内导航:


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

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

    浙ICP备11055608号-3