Linux 系统编程之select

2023-11-17

Linux 系统编程之select

select 允许单个程序监听多个文件描述符,直到一个或者多个文件描述符准备就绪不阻塞系统,常常用于解决阻塞型的程序

相关代码

/* According to POSIX.1-2001 */
#include <sys/select.h>

/* According to earlier standards */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
//nfds:集合的最大值 + 1
//readfds:监测fds中可读的fd
//writefds:监测fds中可写的fd
//exceptfds:fds中异常的fd  如果没有可监视对应类的文件描述符,可把这三个置NULL
//timeout:指定select阻塞等待文件描述符的时间 0:不阻塞等待,立即返回  NULL:无限期阻塞等待  
//return: fail:-1 sucess: 包含在fds中fd 超时:0
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);

void FD_CLR(int fd, fd_set *set);	//把fd从集合中移除
int  FD_ISSET(int fd, fd_set *set);	//判断fd是否在集合中
void FD_SET(int fd, fd_set *set);	//添加fd到集合中
void FD_ZERO(fd_set *set);			//清空集合

#include <sys/time.h>
struct timeval {
    long    tv_sec;         /* seconds */
    long    tv_usec;        /* microseconds */
};

example

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

int	main(int argc, char *argv[])
{
	fd_set fds;
    struct timeval timeout;
    int ret;
    
    FD_ZERO(&fds);
    FD_SET(0, &fds);
    timeout.tv_sec = 1;
    timeout.tv_usec = 0;
 
    ret = select(1, &fds, NULL, NULL, &timeout);
    if(ret == -1)
        perror("select fail");
    else if(ret == 0)
        perror("select timeout");
    else {
        printf("start read fata");
        #判断fd是否在fds中 开始处理
        FD_ISSET(0, &fds);
    }
        
    
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 系统编程之select 的相关文章

  • 使用 MongoDB docker 镜像停止虚拟机而不丢失数据

    我已经在 AWS EC2 上的虚拟机中安装了官方的 MongoDB docker 映像 并且数据库上已经有数据 如果我停止虚拟机 以节省过夜费用 我会丢失数据库中包含的所有数据吗 在这些情况下我怎样才能让它持久 有多种选择可以实现此目的 但
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • gnome-terminal 新选项卡,使用别名作为要执行的命令

    我已经创建了一个别名 bashrc文件如下 alias myproject cd Desktop myproject 当我重新启动终端时保存文件后 输入myproject带我到项目目录 但是当我尝试使用别名作为新的命令参数时gnome te
  • 如何从“git log”中查看 Git 中的特定版本?

    My git log显示为 enter code here git trial git log commit 4c5bc66ae50780cf8dcaf032da98422aea6e2cf7 Author king lt email pro
  • 如何在两个不同帐户之间设置无密码身份验证

    我们可以在两台机器的两种不同用途之间设置无密码身份验证吗 例如 计算机A有用户A 计算机B有用户B 我们可以设置密码 ssh 以便计算机 A 上的用户 A 使用其用户帐户 A 登录计算机 B 谢谢你 如果我理解你的问题 你能设置一下吗ssh
  • 编写多个mysql脚本

    是否可以在复合脚本中包含其他 mysql 脚本 理想情况下 我不想为包含的脚本创建存储过程 对于较大的项目 我想分层维护几个较小的脚本 然后根据需要组合它们 但现在 我很乐意学习如何包含其他脚本 source是一个内置命令 您可以在 MyS
  • 如何使用ffmpeg重叠和合并多个音频文件?

    我正在尝试将多个音频文件合并到一个文件中 但我可以使用以下命令来连接 而不是连接 ffmpeg v debug i file1 wav i file2 wav i file3 wav filter complex 0 0 concat n
  • 远程linux服务器到远程linux服务器大型稀疏文件复制 - 如何?

    我有两台 CentOS 5 4 服务器 每台服务器上都安装了 VMware Server 假设我始终对 vmware 虚拟机使用稀疏文件 将虚拟机文件从一台服务器复制到另一台服务器的最可靠 最快速的方法是什么 虚拟机的文件复制起来很痛苦 因
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • 在 shell 脚本中查找和替换

    是否可以使用 shell 在文件中搜索然后替换值 当我安装服务时 我希望能够在配置文件中搜索变量 然后在该值中替换 插入我自己的设置 当然 您可以使用 sed 或 awk 来完成此操作 sed 示例 sed i s Andrew James
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 进程名称长度的最大允许限制是多少?

    进程名称允许的最大长度是多少 我正在读取进程名称 proc pid stat文件 我想知道我需要的最大缓冲区 我很确定有一个可配置的限制 但就是找不到它在哪里 根据man 2 prctl http man7 org linux man pa
  • CentOS目录结构是树形的吗?

    CentOS 上有相当于树的东西吗 如果你的 Centos 系统上没有安装 tree 无论如何我通常建议服务器设置使用最小安装磁盘 你应该在命令行中输入以下内容 yum install tree y 如果没有安装 那是因为您没有正确的存储库
  • 为 Linux 安装 R 包时出错

    我试图在 R 3 3 上安装一个名为 rgeos 的包 但是当我输入 install packages rgeos 但它返回给我以下错误 其他包也会发生同样的情况 但不是所有包 gt installing source package rg
  • python:numpy 运行脚本两次

    当我将 numpy 导入到 python 脚本中时 该脚本会执行两次 有人可以告诉我如何阻止这种情况 因为我的脚本中的所有内容都需要两倍的时间 这是一个例子 usr bin python2 from numpy import print t
  • 如何获取 linux 实用程序 tail 的源代码?

    这个命令确实非常有用 但是我可以在哪里获取源代码以查看内部发生的情况 thanks tail 实用程序是 Linux 上 coreutils 的一部分 源压缩包 ftp ftp gnu org gnu coreutils coreutils
  • 怎样才能使 Windows 成为一个开箱即用的 POSIX 兼容操作系统?

    这个问题的动机是我的一个牵强的梦想 即 nix 平台上可用的许多优秀软件可以轻松移植到 Windows 微软最近对开源和开放性采取了不同的方法 所以我真的很想知道如果微软有这样的倾向 这样的事情会有多可行 我很好奇的一些更具体的事情是 是否
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 停止服务时单元陷入故障状态(状态=143)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这是我的问题 我有 CentOS 和 java 进程在上面运行 Java进程是通过启动 停止脚本来操作的 它也创建了 java 实例的 p

随机推荐

  • WebBrowser 设置IE兼容性

    在窗体应用程序和wpf程序中会使用到WebBrowser 来显示一个网页 但是可能要显示的网页要求在特定的模式下运行 因此需要调整WebBrowser 对网页兼容性的设置 通过在注册表中设置HKEY CURRENT USER Softwar
  • 【Linux之Shell脚本实战】猜拳小游戏shell脚本

    Linux之Shell脚本实战 猜拳小游戏的shell脚本 一 脚本要求 二 检查本地系统环境 1 检查系统版本 2 检查系统内核版本 三 配置脚本注释模板 1 编辑 vimrc 文件 2 检查模板生效情况 四 编辑shell脚本 1 创建
  • 02vue项目如何配置多页面

    vue项目如何配置多页面 前言 因为我们做项目不可能只有一个界面 就简单说最起码的后台页面 登录界面 主页面最基本的加在一起还三个页面 上次所言cli脚手架搭建一个从0到1的项目 只是单页面 cli脚手架虽然能快速的帮我们搭建一个项目 配置
  • mybatis中批量插入的两种方式(高效插入)

    MyBatis简介 MyBatis是一个支持普通SQL查询 存储过程和高级映射的优秀持久层框架 MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装 MyBatis可以使用简单的XML或注解用于配置和原始映射 将
  • 通过ffmpeg将aac格式转换成wav格式

    这是一个很简单的小程序 但也让我这个初学者折腾了好几天 走算是入门了 总结下学习的过程 希望能够初学者能有所帮助 看源代码 首先得让让它跑起来 看了ffmpeg提供源码api example c 很好的入门程序 虽然对视频编解码十分顺利 但
  • Ubuntu下安装Cppcheck源码操作步骤

    Cppcheck是用在C C 中对code进行静态检查的工具 它的源码在 https github com danmar cppcheck 它的License是GPL 3 0 Cppcheck可以检查不通过编译的文件 执行的检查包括 1 自
  • JavaWeb核心技术——Response响应

    目录 1 Response对象 1 1 Response设置响应数据功能介绍 1 2 Respones请求重定向 1 2 1 Response重定向 redirect 一种资源跳转方式 1 2 2 重定向的实现方式 1 2 3 重定向的特点
  • LeetCode题目笔记——2428. 沙漏的最大总和

    文章目录 题目描述 截图 题目描述 题目难度 中等 方法一 遍历 代码 Python 方法一优化 代码 Python 代码 C 总结 题目描述 截图 这个题是上周的周赛里的第二题 当时做的时候只用了最简单的遍历方法 虽然通过了 但是也挺慢的
  • --RabbitMQ的应用场景以及基本原理介绍

    1 背景 RabbitMQ是一个由erlang开发的AMQP Advanved Message Queue 的开源实现 2 应用场景 2 1异步处理 场景说明 用户注册后 需要发注册邮件和注册短信 传统的做法有两种1 串行的方式 2 并行的
  • 中科院分区表_学术科普:汤森路透分区和中科院JCR分区介绍

    2019年中科院分区表更新了 一区共有1946本 二区有3257本 三区3975本 四区一共有5314本 其中 PNAS及Nature Communications重新回到一区 去年在二区 分区表共收录有14492本期刊 把他们全部放在图文
  • Anaconda3中torch.cuda.is_available()返回false的可能解决办法

    1 问题 在CUDA cudnn 已装好 指令 conda install pytorch torchvision torchaudio pytorch cuda 11 7 c pytorch c nvidia 一直转圈 不得已使用pip指
  • 北工大汇编——综合题(1)

    题目要求 统计字符数 从键盘输入一行字符 统计字母 空格 数字 其他宇符的个数 并显示 要求 提示输入一行宇符串 键盘输入宇符串 Enter 键结束输入 并换行显示结果 题目代码 DATAS SEGMENT 此处输入数据段代码 msg DB
  • unity编辑器详细介绍

    你好 欢迎来到UNITY 2021 世界 这里将会详细为您介绍UNITY基本操作工具 目录 一 工具栏 二 菜单栏 1 File 文件 菜单 2 Edit 编辑 菜单 3 Assets 资源 菜单 4 GameObject 游戏对象 菜单
  • Java Scanner nextInt()方法与示例

    扫描器类的nextInt 方法 Scanner Class nextInt method Syntax 句法 public int nextInt public int nextInt int rad nextInt method is a
  • 支撑区块链大规模商用,FISCO BCOS v3.0的那些“黑科技”

    文章转载自CSDN公众号 在2021年度金链盟生态大会上 全新的FISCO BCOS v3 0正式发布 该版本从架构 算法以及安全可控和隐私计算协同等方向进行了全面升级 满足数字经济时代对区块链系统可承载更大规模 更多场景 更广泛参与的产业
  • 光耦基础知识

    1 光耦 光耦合器 optical coupler 英文缩写为OC 亦称光电隔离器或光电耦合器 简称光耦 在电源当中 光耦和TL431一般都是一起出现的 它们组合一起的作用是用来控制初次级反馈环路的稳定 从而实现输出电压的稳定 有插件的 也
  • IPv6地址前缀

    当我们通过ipv6 install 命令在windows XP系统上安装了ipv6协议栈后 我们可以看到原来的网卡多了一个新的地址 ipv6地址 这个地址是基于ipv6无状态自动配置机制设定的 所有无状态自动配置的地址的前缀都是fe80 其
  • Python爬虫实现抓取腾讯视频所有电影-源码【实战必学】

    用python实现的抓取腾讯视频所有电影的爬虫 1 coding utf 8 2 import re 3 import urllib2 4 from bs4 import BeautifulSoup 5 import string time
  • 更改 华为云 yum 源

    更改 华为云 yum 源 1 安装wget yum install y wget 2 备份 mv etc yum repos d CentOS Base repo etc yum repos d CentOS Base repo bak 3
  • Linux 系统编程之select

    Linux 系统编程之select select 允许单个程序监听多个文件描述符 直到一个或者多个文件描述符准备就绪不阻塞系统 常常用于解决阻塞型的程序 相关代码 According to POSIX 1 2001 include