Chinaunix首页 | 论坛 | 博客
  • 博客访问: 132289
  • 博文数量: 44
  • 博客积分: 956
  • 博客等级: 准尉
  • 技术积分: 521
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-18 12:45
文章分类
文章存档

2012年(11)

2011年(33)

分类: C/C++

2012-01-12 17:44:09


阻塞IO:
大部分程序使用的都是阻塞IO,在缺省下,套接字建立后为阻塞IO
recv:在缓冲区内接收到数据,内核唤醒该进程,如果没有数据,就一直阻塞
send:在发送缓冲区不足,当有足够的发送缓冲区时,内核唤醒该进程
UDP:没有发送缓冲区,sendto()永远不会阻塞

非阻塞IO:当操作不成功后,会返回错误

获取或设置描述符的属性
int fcntl(int fd, int cmd, long arg);
int cmd: F_GETFL, F_SETFL

int flag = fcntl(int fd, F_GETFL, 0);

flag |= O_NONBLOCK;非阻塞方式
fcntl(int fd, F_SETFL, flag);


多路复用IO:

FD_ZERO(&rdfs);
FD_SET(place, &rdfs);
int FD_ISSET(int fd, fd_set *fdest);
FD_CLR(place, &rdfs);
place:要置位的位置,为描述符

select(int n, fd_set *read_fds, fd_set *write_rdfs, fd_set *except, struct timeval *timeout)
返回就绪的个数:将没有就绪的位置置0
n:最大描述符+1
read_fds:读
write_fds:写
except:读写
*timeout:超时时间

先构造一个有关于描述符的表,然后调用select(),当这些描述符中的一个或者
多少个准备好进行IO时函数才返回
阅读(1457) | 评论(0) | 转发(0) |
0

上一篇:网络编程UDP(25)

下一篇:Qt信号与槽(29)

给主人留下些什么吧!~~