select
来源:互联网 发布:手机word朗读软件 编辑:程序博客网 时间:2024/06/04 22:46
1. select
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
readfds:select监视的可读文件句柄集合
writefds:select监视的可写文件句柄集合
exceptfds:select监视的异常文件句柄集合
timeout:本次select()的超时结束时间 (见/usr/sys/select.h)
当readfds或writefds中映象的文件可读或可写或超时,本次select() 就结束返回
2. FD_CLR
void FD_CLR(int fd, fd_set *set);
从集合set中删除描述字fd
3. FD_ISSET
int FD_ISSET(int fd, fd_set *set);
测试fd是否是集合set中一员
4. FD_SET
void FD_SET(int fd, fd_set *set);
向集合set添加描述字fd
5. FD_ZERO
void FD_ZERO(fd_set *set);
将set初始化为空集NULL
6. 举例
struct client{ int num; int afd[10]; fd_set set; pthread_mutex_t mutex;};static struct client client;void *func(void *p) { int i = 0; int ret = 0; char buf[100] = {0}; while(1) { FD_ZERO(&client.set); pthread_mutex_lock(&client.mutex); for(i = 0; i < client.num; i++) { FD_SET(client.afd[i], &client.set); } pthread_mutex_unlock(&client.mutex); ret = select(client.afd[--i] + 1, &client.set, NULL, NULL, NULL); //查询满足要求的套接字 if(ret == 0xffffffff) { perror("select 0xffffffff."); } else if(ret == 0) { perror("select 0."); } else if(ret > 0) { for(i = 0; i < client.num; i++) { memset(buf, 0, sizeof(buf)); if(FD_ISSET(client.afd[i], &client.set)) { ret = recv(client.afd[i], buf, sizeof(buf), 0); if(ret > 0) { puts(buf); } } } } } } int main() { int ret = 0; int fd = 0; fd = socket(PF_INET, SOCK_STREAM, 0); struct sockaddr_in my_addr; my_addr.sin_family = AF_INET; my_addr.sin_port = htons(5000); my_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); ret = bind(fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); ret = listen(fd, 10); pthread_mutex_init(&client.mutex, NULL); int len = 0; pthread_t pid = 0; struct sockaddr_in his_addr; while(1) { memset(&his_addr, 0 ,sizeof(struct sockaddr_in)); int afd = accept(fd, (struct sockaddr*)&his_addr, &len); pthread_mutex_lock(&client.mutex); client.afd[client.num++] = afd; pthread_mutex_unlock(&client.mutex); if(pid == 0) { ret = pthread_create(&pid, NULL, func, NULL); } } pthread_mutex_destroy(&client.mutex); return 0; }
1 0
- select()
- select
- select
- select
- select
- select
- select
- select
- select()
- select
- Select .....
- Select
- select
- select ''
- select
- select
- select
- select
- 一般筛法和快速线性筛法求素数 求素数的一点总结
- 菜鸟,大牛,教主的区别
- 神牛笔记:吉林大学ACM总结(fennec)
- HDFS+MapReduce+Hive+HBase十分钟快速入门
- 教主们:虽然这道题我不会,但Ac还是没问题的。
- select
- vector中find和find_if的用法
- JavaScript异步加载浅析
- 引用 Map 数据结构的排序问题
- 一些oj的返回结果:通过结果找错误,debug。
- C语言整理-8
- inline内联函数的优缺点
- 为什么不能在子类的初始化列表里初始化父类的成员
- 一些好的习惯