linux程序设计SELECT系统调用
2012-08-04 15:30
381 查看
最近刚学了linux网络编程里的套接字,然后也写了简单的客户端和服务器之间连接互相读写的简单程序,一直用轮询的方式进行读写,觉得那样客户端和服务器就一直在占用CPU资源,觉得很浪费CPU资源,之前在同一台机上学过用信号量去控制几个个进程或几个线程间的读写与等待,可是现在是两台机器间的通信,之前的信号量就用不上了,翻了翻书,找到SELECT这个函数,可以解决问题。
select这个函数可以设置读写的阻塞时间(当然也可以设成永久阻塞)
以下是一个简单的代码:
运行以后不输入任何东西就会阻塞在SELECT这一行,直到输入数据程序才往下运行。
当然也可以设置阻塞的时间
这样就会阻塞2.5秒后往下执行了!
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系统调用_2
- linux系统调用select
- Linux select和poll系统调用
- Linux select系统调用
- 【转】Linux-2.6.25 select系统调用源码分析
- Linux下select()系统调用笔记
- Linux - Select()系统调用及文件描述符集fd_set的应用
- Linux之select系统调用_1
- Linux之select系统调用_1
- Linux I/O复用——select系统调用
- Linux 2.6.25中的select系统调用 http://zhangyafeikimi.iteye.com/blog/248815
- linux select 系统调用
- linux下select系统调用
- Linux之select系统调用_2
- Linux-2.6.25 select系统调用源码分析
- Linux-2.6.25 select系统调用源码分析
- Linux系统调用
- Linux 下系统调用的三种方法
- Linux系统调用fork()用法详解1