使用select实现定时任务

selectOutOfTime.c里边的代码如下:

#include<stdio.h>
#include<sys/time.h>
#include<sys/types.h>
#include<unistd.h>
#include <string.h>#define BUF_SIZE 100int main(void){fd_set reads;struct timeval tv;int errorNum;char send_line[BUF_SIZE];FD_ZERO(&reads);FD_SET(0,&reads);tv.tv_sec = 5;tv.tv_usec = 0;errorNum = select(1,&reads,NULL,NULL,&tv);// 原先以为第一个参数中,0 代表标准输入,1代表标准输出,这是错误的想法if (FD_ISSET(STDIN_FILENO, &reads)) {if (fgets(send_line, BUF_SIZE, stdin) != NULL) {int i = strlen(send_line);if (send_line[i - 1] == '\n') {send_line[i - 1] = 0;}printf("input string: %s\n", send_line);}}if(errorNum == -1){perror("select()");}else if(errorNum){printf("Data is available now.\n");}else{//此处就是当errorNum = 0时,表明超时了printf("No data within five seconds.\n");}return 0;
}

可以看到这是一个简单的定时小程序,若是5秒内没有输入字符串,那么就会输出No data within five seconds.,然后程序退出;要是5秒内输入字符串了,那么就会先把input string:+刚刚输入的字符串输出到屏幕上,之后再输出Data is available now.,然后结束程序。
sudo gcc selectOutOfTime.c -o selectOutOfTime进行编译,sudo ./selectOutOfTime两次执行,对应上边的5秒内是否输出字符串的描述。
在这里插入图片描述

进行一下改动,就可以实现定时任务了,selectOutOfTimeWhile.c代码如下:

#include<stdio.h>
#include<sys/time.h>
#include<sys/types.h>
#include<unistd.h>
#include <string.h>#define BUF_SIZE 100int main(void){fd_set reads, cpy_reads;struct timeval tv;int errorNum;char send_line[BUF_SIZE];FD_ZERO(&reads);FD_SET(0,&reads);while(1){cpy_reads=reads;tv.tv_sec = 5;tv.tv_usec = 0;errorNum = select(1,&cpy_reads,NULL,NULL,&tv);if (FD_ISSET(STDIN_FILENO, &cpy_reads)) {FD_CLR(STDIN_FILENO, &cpy_reads);if (fgets(send_line, BUF_SIZE, stdin) != NULL) {int i = strlen(send_line);if (send_line[i - 1] == '\n') {send_line[i - 1] = 0;}printf("input string: %s\n", send_line);}}if(errorNum == -1){perror("select()");}else if(errorNum){printf("Data is available now.\n");}else{printf("No data within five seconds.\n");}}return 0;
}

sudo gcc selectOutOfTimeWhile.c -o selectOutOfTimeWhile进行编译,sudo ./selectOutOfTimeWhile执行,之后可以看到若是没有输入内容的话,那么就会每隔5秒输出No data within five seconds.,最后按下Ctrl+c退出程序。
在这里插入图片描述

此文章为11月Day 14学习笔记,内容来源于极客时间《网络编程实战》。

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

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

相关文章

linux openlab搭建web网站

网站需求&#xff1a; 1.基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c; 1、基于 www.openlab.com/student 网站访问学生信息&#xff0c; 2、基于 www.openlab…

车间安灯呼叫看板的功能与优势介绍

现在的工厂车间的管理变得越来越复杂&#xff0c;生产过程中可能会出现各种问题&#xff0c;如设备故障、物料短缺、工人伤病等。为了提高生产效率、优化生产管理&#xff0c;许多工厂引入了车间安灯呼叫看板系统。本文将介绍车间安灯呼叫看板的功能与优势。 一、功能介绍 1. 实…

假冒 Skype 应用程序网络钓鱼分析

参考链接: https://slowmist.medium.com/fake-skype-app-phishing-analysis-35c1dc8bc515 背景 在Web3世界中&#xff0c;涉及假冒应用程序的网络钓鱼事件相当频繁。慢雾安全团队此前曾发表过分析此类网络钓鱼案例的文章。由于Google Play在中国无法访问&#xff0c;许多用户…

【已解决】git push send-pack: unexpected disconnect while reading sideband packet

解决办法&#xff1a;修改缓存大小 打开项目所在路径下的git目录 找到config文件&#xff0c;用记事本打开编辑。 添加如下内容并保存即可 [http] postBuffer 1048576000

(只需三步)虚拟机上vm的ubuntu不能联上网怎么办

第一步&#xff1a;重启虚拟网络适配器 第二步&#xff1a;删掉网络适配器&#xff0c;重新添加 第三步&#xff1a;重启虚拟机网络服务器 sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start 再打…

Clickhouse学习笔记(11)—— 数据一致性

使用合并树引擎时&#xff0c;无论是ReplacingMergeTree还是SummingMergeTree&#xff0c;都只能保证数据的最终一致性&#xff0c;因为数据的去重、聚合等操作会在数据合并的期间进行&#xff0c;而合并会在后台以一个不确定的时间进行&#xff0c;因此无法预先计划&#xff1…

11-13 /11-14代理模式 AOP

调用者 代理对象 目标对象 代理对象除了可以完成核心任务&#xff0c;还可以增强其他任务,无感的增强 代理模式目的: 不改变目标对象的目标方法的前提,去增强目标方法 分为:静态代理,动态代理 静态代理 有对象->前提需要有一个类&#xff0c;那么我们可以事先写好一个类&a…

JAVA 版小程序商城免费搭建 多商家入驻 直播带货 商城系统 B2B2C 商城源码之 B2B2C产品概述

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

黑马程序员微服务SpringCloud实用篇02

SpringCloud实用篇02 0.学习目标 1.Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我…

今日最新版早安问候大全,创意好看的早上好祝福图片带字温馨

1、阳光照&#xff0c;鸟欢叫&#xff0c;小懒猪&#xff0c;起床了&#xff0c;伸懒腰&#xff0c;笑一笑&#xff0c;深呼吸&#xff0c;精神好&#xff0c;开心到&#xff0c;欢乐抱&#xff0c;幸福随&#xff0c;乐淘淘&#xff0c;好运伴&#xff0c;祝福来&#xff0c;每…

MySQL 索引事务

MySQL 索引&事务 文章目录 MySQL 索引&事务1. 索引1.1 概念1.2 作用1.3 使用场景1.4 使用 2. 事务2.1 为什么使用事务2.2 事务概念2.3 事务的特性2.4 使用 1. 索引 1.1 概念 索引(index)是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的…

Elasticsearch7 入门 进阶

1、全文检索 1.1、数据分类 按数据分类的话&#xff0c;主要可以分为以下三类&#xff1a; 结构化数据&#xff1a;固定格式、有限长度&#xff0c;比如mysql存的数据非结构化数据&#xff1a;不定长、无固定格式&#xff0c;比如邮件、Word文档、日志等半结构化数据&#xf…