linux程序设计SELECT系统调用
来源:互联网 发布:苹果mac怎么升级系统 编辑:程序博客网 时间:2024/04/30 08:49
最近刚学了linux网络编程里的套接字,然后也写了简单的客户端和服务器之间连接互相读写的简单程序,一直用轮询的方式进行读写,觉得那样客户端和服务器就一直在占用CPU资源,觉得很浪费CPU资源,之前在同一台机上学过用信号量去控制几个个进程或几个线程间的读写与等待,可是现在是两台机器间的通信,之前的信号量就用不上了,翻了翻书,找到SELECT这个函数,可以解决问题。
select这个函数可以设置读写的阻塞时间(当然也可以设成永久阻塞)
以下是一个简单的代码:
#include <unistd.h>int main(){ int nread; char buffer[128]; fd_set inputs; FD_ZERO(&inputs); FD_SET(0,&inputs); select(FD_SETSIZE, &inputs, NULL, NULL, NULL); printf("aaaaaa\n"); nread = read(0,buffer,sizeof(buffer)); buffer[nread] = '\0'; printf("%s",buffer);}~ ~
运行以后不输入任何东西就会阻塞在SELECT这一行,直到输入数据程序才往下运行。
当然也可以设置阻塞的时间
#include <sys/time.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(){ int nread; char buffer[128]; fd_set inputs; struct timeval timeout; FD_ZERO(&inputs); FD_SET(0,&inputs); timeout.tv_sec = 2;//2秒 timeout.tv_usec = 500000;//0.5秒 /*加起来是2.5秒*/ select(FD_SETSIZE, &inputs, NULL, NULL, &timeout); printf("aaaaaa\n"); nread = read(0,buffer,sizeof(buffer)); buffer[nread] = '\0'; printf("%s",buffer);}
这样就会阻塞2.5秒后往下执行了!
- linux程序设计SELECT系统调用
- linux Select()系统调用
- linux系统调用select
- Linux select系统调用
- linux select 系统调用
- linux select 系统调用
- linux下select系统调用
- Linux下select()系统调用
- Linux下select()系统调用笔记
- Linux select和poll系统调用
- select系统调用
- 关于select系统调用
- select系统调用
- select系统调用
- select系统调用
- Select系统调用方法
- select系统调用
- Linux-2.6.25 select系统调用源码分析
- STM32 Printf函数实现方法[整理]
- Web UI设计网站
- Hibernate 映射组件属性
- flex解决跨域问题的策略文件的写法
- 有一种学雷锋叫“替友买官”
- linux程序设计SELECT系统调用
- ASCII码对照表
- 外文资料~~
- hdu 1036
- 给明年依然年轻的我们:欲望、外界、标签、天才、时间、人生目标、现实、后悔、和经历
- 保证一天不困的25个小方法
- <JQuery>双下拉框内容移动
- oracle10g win7下使用命令启动服务和实例
- KMP算法详解