linux c中select使用技巧

1、select函数作为定时器使用
    it_value.tv_sec = 0;
    it_value.tv_usec = 100000;
    select(1,NULL,NULL,NULL,&it_value);
   上面的代码并不是立即返回而是等待100ms,可以作为定时器使用,并且准确度比sleep高。
2、linux平台下select函数修改超时时间
select_timeout.tv_sec = 10;
select_timeout.tv_usec = 0;
for(;;)
{
 if(select(fd+1, &rset, NULL, NULL, &select_timeout)<=0) 
 {

**************
 }
}
我们原本希望在fd可读的时候处理该数据;如果没有数据睡眠等待10s中。但是
实际上由于select函数修改select_timeout的值,导致上面的代码进入无限循环并且不能睡眠。

3、select函数协助判断网络连接断开
select(confd+1, &rset, NULL, NULL, &select_timeout);
假设confd是一个tcp的网络fd并且加入到rset中。如果socket的对端关闭连接,
该select函数立即从睡眠中返回,这时候如果读该socket返回值为0;我们可以判断该socket断开。

4、select函数判断一个网络socket是否可写

select(confd+1, NULL, &wset, NULL, &select_timeout);

假设一个confd是一个tcp连接的网络socket,并且在调用上面的代码之前对端已经关闭了
该tcp连接,这时候select函数立即返回,但是返回值是0;如果在调用该函数时对端没有
关闭并且该socket写缓冲区为空,这时候该任务睡眠等待该confd可写,如果等待的过程
中该对端关闭连接select并不会立即返回,而是一直睡眠直到超时。

时间: 2024-10-01 06:32:16

linux c中select使用技巧的相关文章

linux c中select使用技巧——计时器(转)

通过本文你会了解到: 1. select()原型及参数说明 2. select()应用情景 3. select()注意事项 4. select()作定时器 原型 1 int select(int nfds, fd_set *readfds, fd_set *writefds, 2 fd_set *exceptfds, struct timeval *utimeout); 参数说明 readfds, writefds, exceptfds为所要监听的三个描述符集: --readfds 监听文件描述

find查找文件命令 - Linux系统中的常用技巧整理

"find"在Linux系统中是比较常用的文件查找命令,使用方法有很多,可以拥有查找文件.文件目录.文件更新时间.文件大小.文件权限及对比文件时间.下面是整理的"find"常用方法,方便以后需要的时候直接到此文章查看. 一.查找文件或者目录 find ./ -name file #file请改成自己要差的文件 二.查找文件更新时间 find ./ -mtime -3 #文件更新在3天内的 find ./ -mtime +3 #文件更新在3天以上的 三.查找文件大小

linux socket中select()函数以及FD_ZERO FD_SET FD_CLR FD_ISSET

linux socket非阻塞编程时常见到如下的code: socket   s; ..... fd_set   set; ..... struct timeval tv; while(1) { FD_ZERO(&set);//将你的套节字集合清空 FD_SET(s,   &set);//加入你感兴趣的套节字到集合,这里是一个读数据的套节字s tv.tv_sec = 3; tv.tv_usec = 0; select(maxfd+1,NULL,&set,NULL,&tv);

Linux学习之select

本文和大家分享的主要是linux编程中select相关内容,一起来看看吧,希望对大家学习linux有所帮助. select系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读.可写和异常等事件. select 机制的优势 为什么会出现select模型? 先看一下下面的这句代码: int iResult = recv(s, buffer,1024); 这是用来接收数据的,在默认的阻塞模式下的套接字里,recv会阻塞在那里,直到套接字连接上有数据可读,把数据读到buffer里后r

linux中select的使用方法

fd_set是一组文件描述符(fd,file descriptor)的集合,它用一位来表示一个fd. 系统提供了4个宏对描述符集进行操作: #include <sys/select.h>#include <sys/time.h> //设置文件描述符集fdset中对应于文件描述符fd的位(设置为1)void FD_SET(int fd, fd_set *fdset); //清除文件描述符集fdset中对应于文件描述符fd的位(设置为0)void FD_CLR(int fd, fd_s

Linux中select函数

转载自:http://blog.163.com/henry_hlh/blog/static/17039507420124211841298/ Unix中的函数select和poll用来,支持Unix中I/O复用的功能,在Unix中I/O模型可以分为以一几种: (1)阻塞I/O (2)非阻塞I/O (3)I/O复用(select和poll) (4)信号驱动I/O(SIGIO) (5)异步I/O 其中,现在比较流行的I/O模型是阻塞I/O模型.阻塞I/O是当应用程序和内核交换数据时,由于内核还没有准

Linux以及Android开发中的小技巧和长繁命令记录收集

不断更新收集中.... 2014071743 ssh以nx_guest的身份登录到172.24.221.137,然后在172.24.221.137与172.24.61.252的8080端口建立网络连接,同时创建端口为5678的本地代理服务 ssh -C -f -N -o 'TCPKeepAlive=yes' -L 5678:172.24.61.252:8080 [email protected] 反编译android下的二进制程序 ./prebuilts/gcc/linux-x86/arm/ar

linux find命令-print0和xargs中-0使用技巧(转载)

本文介绍了linux find命令中-print0和xargs中-0用法技巧,一些find命令的使用经验,需要的朋友参考下. 本节内容:linux find命令中-print0和xargs中-0的用法. 默认情况下, find命令每输出一个文件名, 后面都会接着输出一个换行符 ('n'), 因此find 的输出都是一行一行的: [bash-4.1.5] ls -ltotal 0-rw-r--r-- 1 root root 0 2010-08-02 18:09 file1.log-rw-r--r-

Linux系统故障排查和修复技巧

Linux系统故障排查和修复技巧 任何操作系统都有出现故障的时候,Linux系统也不例外,在启动过程中可能会出现一些故障,从而导致系统无法正常启动.本文从单用户模式.GRUB命令操作.Linux救援模式这三个方面分析了故障排查和修复案例,来帮助大家解决此类问题. AD:2014WOT全球软件技术峰会北京站 课程视频发布 我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应用单用户模式.GRUB命令操作.Linux救援模式的故障修复案例帮助大家了解此类问题的解决