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

# ......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Spring @Transactional进行数据源路由

卡尔帕帕&#xff08;Carl Papa&#xff09;在Spring框架中使用方面来确定要使用的DataSource &#xff08;读写或只读&#xff09;启发了我。 所以&#xff0c;我正在写这篇文章。 我必须承认&#xff0c;我对Spring的AbstractRoutingDataSource早已熟悉。 但是我不知道在哪里…

linux应用程序是什么,linux下c开发了一个应用程序,它的扩展名是什么?

这个貌2113似涉及到linux文件系统。linux文件系统与windows的不相同5261&#xff0c;windows系统应该是通4102过文件后缀来进行文件类型是别的&#xff0c;而1653linux虽然也会借鉴后缀信息&#xff0c;但好像不完全依赖于文件后缀。比如&#xff0c;在windows下&#xff0c;讲…

linux服务器带宽设置,linux 系统查看服务器带宽使用

使用linux服务器中&#xff0c;可能刚接触的同学不会查看系统的带宽使用&#xff0c;这里收集了一个脚本&#xff0c;可以实时显示服务器的带宽使用喔~vi cs.sh然后粘贴以下内容&#xff1a;#!/bin/bashif [ -z "$1" ]; thenechoecho usage: $0 network-interfaceech…

moxy json介绍_MOXy的对象图– XML和JSON的输入/输出局部模型

moxy json介绍假设您有一个要公开为RESTful服务的域模型。 问题是您只想输入/输出部分数据。 以前&#xff0c;您将创建一个代表子集的单独模型&#xff0c;然后使用代码在模型之间移动数据。 在EclipseLink 2.5.0中&#xff0c;我们有一个称为“对象图”的新功能&#xff0c;使…

linux设置新硬盘权限,Linux 下挂载新硬盘以及更改为普通权限

1、启动终端&#xff0c;以root用户登录2、查看硬盘信息&#xff1a;#fdisk -l3、进入磁盘&#xff0c;对磁盘进行分区&#xff1a;#fdisk /dev/sda(注意看你要挂载哪一个磁盘&#xff0c;我的是sda&#xff0c;有的是sdb)4、格式化分区&#xff1a;#mkfs.ext3 /dev/sda1 //注&…

使用Payara Micro的Easy Java EE Microservices

想知道如何开始使用Java EE Microservices&#xff1f; 使用Java EE API只需很少的步骤即可部署微服务。 许多人认为Java EE无法与微服务一起使用&#xff0c;但事实并非如此……特别是如果您仅使用服务所需的Java EE规范。 在这篇简短的文章中&#xff0c;我将演示如何使用Jav…

linux终端lex程序运行,lex的简单使用

Lex & Flex 简介Lex是lexical compiler的缩写&#xff0c;是Unix环境下非常著名的工具&#xff0c; Lex (最早是埃里克施密特和 Mike Lesk 制作)是许多 UNIX 系统的标准词法分析器(lexical analyzer)产生程式&#xff0c;而且这个工具所作的行为被详列为 POSIX 标准的一部分…

Linux内存page,Linux虚拟内存管理 - Page Table的作用

虚拟内存的作用&#xff1a;1.扩展实际有限的物理内存&#xff0c;当然这种扩展是虚拟的&#xff0c;比如物理内存512M&#xff0c;对于一个需要1G空间的进程来说&#xff0c;照样可以运行。这增加了操作系统是应用范围。2.使得进程中的数据空间增大&#xff0c;增大到多少与硬…

entitymanager_实体管理器的类型:应用程序管理的EntityManager

entitymanagerJPA规范定义了几种类型的EntityManagers / Persistence Context。 我们可以有&#xff1a; 扩展和事务范围的EntityManager&#xff0c; 容器管理或应用程序管理的EntityManager。 JTA或本地资源EntityManager&#xff0c; 除了上述区别之外&#xff0c;我们还…

linux安装无法添加挂载,linux-无法在已挂载/ etc / passwd和/ etc / shadow的docker容器中添加新用户...

问题示例&#xff1a;docker run -ti -v my_passwd:/etc/passwd -v my_shadow:/etc/shadow --rm centos[root681a5489f3b0 /]# useradd test # does not work !?useradd: failure while writing changes to /etc/passwd[root681a5489f3b0 /]# ll /etc/passwd /etc/shadow # pe…

CDI中的事务异常处理

在Java EE中&#xff0c;在执行事务性业务方法期间引发的异常导致事务回滚。 但是&#xff0c;只有系统异常&#xff08;即运行时异常&#xff09;才是这种情况&#xff0c;该方法异常未在方法签名中声明。 对于应用程序异常&#xff08;即检查的异常&#xff09;或任何带Appl…

openoffice+linux+jodconverter+乱码,OpenOffice安装和转换乱码解决方案

前言&#xff1a;OpenOffice项目中用途&#xff1a;word转换pdfWindows安装、转换&#xff1a;安装包下载后一路OK就可以正常安装&#xff0c;转换没有问题Linux安装、转换&#xff1a;安装有分DEB包和RPM包&#xff0c;下面会说明各自安装方法在en_US.UTF-8 系统环境下会出现乱…

linux常用操作符,Shell常用操作符总结

一、算术操作 - * / %二、关系操作> < ! && ||三、测试操作测试命令 : test [ ] [[ ]] (( ))1、测试文件状态-d 目录-b 块设备-s 文件长度 > 0、非空-f 正规文件-w 可写-L 符号连接-u 文件有 suid 位设置-r 可读…

junit 参数化测试用例_JUnit:在参数化测试中命名单个测试用例

junit 参数化测试用例几年前&#xff0c;我写了有关JUnit参数化测试的文章 。 我不喜欢它们的一件事是JUnit使用数字命名了单个测试用例&#xff0c;因此&#xff0c;如果它们失败&#xff0c;您将不知道是哪个测试参数导致了失败。 以下Eclipse屏幕快照将向您展示我的意思&…

华硕台式机安装linux进不去系统,[已解决]求助,无法进入系统

之前一直用arch系统盘&#xff0c;Windows系统盘是在另一台电脑上的&#xff0c;我另外一台电脑昨天摔了&#xff0c;我还以为是硬盘坏了&#xff0c;把这块windows硬盘换到这台华硕主板的电脑&#xff0c;发现硬盘没坏。我于是把windows硬盘从机箱拿出来&#xff0c;现在碰到了…

处理JAX-RS中的自定义异常类型

JAX-RS支持处理自定义异常&#xff08;以EJB或CID Bean形式抛出&#xff09;以处理自定义HTTP响应。 假设我们有一个“异常” EJB&#xff1a; Stateless public class Hello {public String greeting() {if (new Random().nextBoolean())throw new GreetingException("…

MX250和第三方Linux版区别,MX250和MX350哪个好一点,区别和差距在哪里?求推荐?_科技数码通...

MX350系列显卡使笔记本颜值变得更高&#xff0c;性能更强&#xff0c;更轻便&#xff0c;在轻便笔记本需求变得越来越大&#xff0c;但性能也要求越来越高&#xff0c;特别是在图像处理方面&#xff0c;这个时候MX系列的显卡便应运而生&#xff0c;其拥有者超低的功耗&#xff…

linux r包默认安装位置,R-Language(R语言或称r-project)的安装

1、R语言的简介R语言(r-project)是主要用于统计分析、绘图的语言和操作环境。2、配置yum源2.1、安装说明由于编译安装相对繁琐&#xff0c;故而安装使用repoforge的源解决&#xff0c;免去编译的麻烦。注意&#xff1a;请根据实际的系统OS版本选取合适的YUM源。2.3、rpmforge源…

aws s3 命令行_通过命令行界面使用AWS ElasticMapReduce

aws s3 命令行在本文中&#xff0c;我将通过使用EMR的CLI使用AWS MapReduce服务&#xff08;称为ElasticMapReduce &#xff09;。 使用EMR的过程可以大致分为三个步骤&#xff1a; 设置并填充S3存储桶 创建并运行EMR作业 从S3存储桶中获取结果 在开始这三个高级步骤之前&…

在5分钟内将Spring Boot作为Windows服务启动

最近&#xff0c;我不得不将Spring Boot应用程序部署为Windows服务&#xff0c;并且对使用winsw如此容易感到惊讶。 我之前曾写过关于使用procrun – Java程序作为Windows服务的文章 &#xff0c;但是winsw更加容易 入门 Spring Boot文档的第59节是有关安装Spring Boot应用程序…