linux 线程等待时间,线程超时等待方法 linux中select()函数使用

线程超时等待方法 linux中select()函数使用

select系统调用时用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。

关于文件句柄,其实就是一个整数,通过socket函数的声明就明白了:

int socket(int domain, int type, int protocol);

我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、stderr。

继续上面的select,就是用来监视某个或某些句柄的状态变化的。select函数原型如下:

int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

函数的最后一个参数timeout是一个超时时间值。其类型是struct timeval *,即一个struct timeval结构的变量的指针,所以我们在程序里要声明一个struct timeval tv;然后把变量tv的地址&tv传递给select函数。struct timeval结构如下:

struct timeval

{

long tv_sec;  //seconds

long tv_usec; //microseconds

};

第2、3、4三个参数是一样的类型;fd_set *,即我们在程序里要申请几个fd_set类型的变量,比如rdfds,wtfds,exfds,然后把这个变量的地址&rdfds,&wtfds,&exfds传递给select函数。这三个参数都是一个句柄的集合,第一个rdfds是用来保存这样的句柄的:当句柄的状态变成可读时系统就告诉select函数返回,同理第二个函数是指向有句柄状态变成可写时系统就会告诉select函数返回,同理第三个参数exfds是特殊情况,即句柄上有特殊情况发生时系统会告诉select函数返回。特殊情况比如对方通过一个socket句柄发来了紧急数据。如果我们程序里只想检测某个socket是否有数据可读,我们可以这样:

fd_set  rdfds;

struct timeval tv;

int ret;

FD_ZERO(&rdfds);

FD_SET(socket, &rdfds);

tv.tv_sec = 1;

tv.tv_uses = 500;

ret = select (socket + 1, %rdfds, NULL, NULL, &tv);

if(ret < 0) perror (“select”);

else if (ret = = 0) printf(“time out”);

else {

printf(“ret = %d\n”,ret);

if(FD_ISSET(socket, &rdfds)){

/* 读取socket句柄里的�

相关文档:

1. HCI层协议概述:

HCI提供一套统一的方法来访问Bluetooth底层。如图所示:

从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。

在Host这一端:application,SDP,L2cap等协议 ......

The new USB "On-The-Go" (OTG) capabilities are not yet widely

understood, or even generally available. The most visible feature of

OTG is that it defines the behavior of intelligent "Dual-Role" USB

devices, such as cameras or wireless handsets, which act either as USB

host or ......

gcc的编译过程分为四步,分别为:

(1)预编译 (Pre-Processing)

(2)编译 (Compiling)

(3)汇编 (Assembling)

(4)链接 (Linking)

以hello.c为例说明:

#include

int main(void)

{

printf("Hello World!");

return 0;

}

(1)预编译阶段 (Pre-Processing)

&nbs ......

Linux®技术、开发模型和社区都对 IT 业产生了重要的影响,我们能做的就是站到一边看看这些,很高兴与 developerWorks 一起度过了第一个 10 年。Linux 团队已经将这些对 Linux 产生重大影响的内容整理到一起。

过去 10 年里,Linux 发生了太多的事情,很难完整地列出该操作系统的重要事件和技术改进。尽管如此,为了庆� ......

软件环境

debian 5.0

Apache Httpd 2.0.63 (http://httpd.apache.org

)

OpenSSL 0.9.81 (http://www.openssl.org/source

)

SSL-Tools (http://www.openssl.org/contrib/ssl.ca-0.1.tar.gz

)

安装步骤(所有操作使用root用户进行):

1. OpenSSL

#tar zxvf openssl-0.9.81.tar.gz

#cd openssl-0.9.81

#./config

# ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值