Linux编程基础 4.2:软件条件

3 软件条件

当满足某种软件条件时,也可以驱使内核发送信号。
alarm
setitimer

3.1 alarm函数

#include <unistd.h>
unsigned int alarm(unsigned int seconds);

函数功能

  • 相当于计时器,驱使内核在指定秒数后发送信号到调用该函数的进程。

参数说明

  • seconds:以秒为单位,整数

返回值

  • 若进程不是第一次调用alarm,且上一个alarm尚有剩余秒数,则该函数成功调用后返回旧计时器的剩余秒数,否则返回0。

【案例 1】在程序中设置计时器,使进程在指定秒数后终止运行。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main() {alarm(1);while(1){printf("Process will finish!");}//of whilereturn 0;
}//of main

3.2 setitimer函数

#include <sys/time.h>
int setitimer(int which, const struct itimerval * new_value, struct itimerval * old_value);
struct itimerval{struct timeval it_interval;	//间隔时间struct timeval it_value;	//初始定时时间
};
struct timeval{long tv_sec;	//秒long tv_usec;	//微秒
};

函数功能

  • 设置定时器,精确到微秒,比alarm精度更高,并且可以实现周期定时。

参数说明

  • which:以何种方式计时:
    – ITIMER_REAL:自然定时法计时,计算自然流逝的时间,计时结束递送14号信号SIGALRM;
    – ITIMER_VIRTUAL:只计算进程占用CPU的时间,计时结束递送26号信号SIGVTALAM;
    – ITIMER_PROF:计算进程占用CPU及执行系统调用的时间,即进程在用户空间和内核空间运行时间的总和,计时结束递送27号信号SIGPROF。
  • new_value:一个itimerval类型的指针,表示计时器定时时长:
    – 若只指定it_value,则只实现一次定时;
    – 若同时指定it_interval,则可实现重复定时;
    – setitimer工作机制是,先对it_value倒计时,当it_value计时结束时,触发信号发送条件。然后重置it_value为it_interval,继续对it_value倒计时,如此一直循环。
  • old_value:用来保存先前设置的new_value,通常设置为NULL。

返回值

  • 0:成功调用;
  • -1:调用失败并设置errno。

【案例 2】使用setitimer实现alarm函数。

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <error.h>unsigned int my_alarm(unsigned int paraSec) {struct itimerval tempIt, tempOldIt;int tempRet;tempIt.it_value.tv_sec = paraSec;tempIt.it_value.tv_usec = 0;tempIt.it_interval.tv_sec = 0;tempIt.it_interval.tv_usec = 0;tempRet = setitimer(ITIMER_REAL, &tempIt, &tempOldIt);if(tempRet == 1){perror("setitimer");exit(1);}//of ifreturn tempOldIt.it_value.tv_sec;
}//of my_alarmint main(){my_alarm(1);while(1){printf("Process will finish!");}//of whilereturn 0;
}//of main

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

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

相关文章

layui 如何去dom_常用元素操作 - layui.element

元素功能的开启只需要加载element模块即会自动完成&#xff0c;譬如tab选项卡切换、导航菜单滑动切换效果、面包屑导航、进度条等&#xff0c;使用这些小交互功能的前提就是&#xff1a;拥有符合这些小功能的所需正确的HTML结构&#xff0c;以及加载element模块&#xff1b;如下…

苹果5越狱教程_unc0ver5.2.0安装方法 iOS13.5用Cydia Impactor或AltStore越狱教程

unc0ver5.2.0是最新更新出来的越狱手机系统&#xff0c;这次的更新不仅仅只是修复了系统的稳定性&#xff0c;大家在更新之后可以支持iOS13.5.5Beta/iOS13.6Beta的使用&#xff0c;所有使用苹果手机的用户想要使用的话可以看下面的详细安装教程&#xff0c;为大家介绍详细的操作…

Linux编程基础 4.3:信号阻塞

4 信号阻塞 在进程PCB中存在两个信号集&#xff1a;信号掩码&#xff08;signal mask&#xff09;、未决信号集&#xff08;signal pending&#xff09;。 两个信号集都是位图&#xff0c;每一位对应一个信号&#xff1a; 若mask中某个位被设置为1&#xff0c;则对应的信号将…

# 定义四边形_【四边形系列专题】 特殊平行四边形之矩形

点击上方蓝字关注我们【四边形系列专题】特殊平行四边形之矩形TSQ中学数学微信&#xff1a;TSQmaths一、知识网络二、重难突破知识点一 矩形的性质及应用1、定义&#xff1a;有一个角是直角的平行四边形叫做矩形&#xff0e;注意&#xff1a;1、对称性&#xff1a;矩形是轴对称…

xs资料网-产品设计图档下载_proe玩具车3D模型图档下载creo4.0汽车模型下载中磊教育...

现在设计产品的还是有相当一大部分人是用proe造型的&#xff0c;之前我们一直做的是UG的产品造型&#xff0c;今天给大家介绍一款玩具车的3d模型&#xff0c;喜欢的可以下载下载自己研究研究&#xff0c;中磊教育产品设计教程proe玩具车3D模型图档是通过曲面造型所绘制的零件&a…

Linux编程基础 4.4:信号捕获

5 信号捕获 信号的产生是异步事件&#xff0c;进程不知道信号何时会递送&#xff0c;也不会等待信号到来。 进程可以为信号注册信号处理函数来实现自定义动作。 进程的信号在内核态处理&#xff0c;内核为每个进程准备了一个信号向量表&#xff0c;记录每个信号所对应的处理机…

苹果7手机严重卡顿_分享苹果手机最实用的7个技巧,各个精心挑选,不知道真的太亏了...

使用苹果手机这么久了&#xff0c;你一定也发现了不少好用的功能&#xff0c;今天就来分享苹果手机最实用的7个技巧&#xff0c;每个都是精心挑选&#xff0c;不要错过&#xff0c;总有一个是你需要的。1、 三指操作在编辑文档的时候&#xff0c;三指左滑是撤销(上一步编辑撤销…

实验一:系统编程开发环境实验

一【实验目的】 1.熟悉Linux开发环境&#xff1b; 2.掌握Linux程序编译调试方法&#xff1b; 3.理解文件I/O通用操作&#xff0c;掌握内核函数的基本用法&#xff1b; 4.支撑网络空间安全专业的专业核心能力、综合创新能力。 二【实验要求】 以下每个实验均要求&#xff1a;…

如何获取大端中的数据_【软件】ProE中各种获取数据方式的区别

更多精彩&#xff0c;请点击上方蓝字关注我们&#xff01;软件ProE中各种获取数据方式的区别输入特征&#xff1a;输入特征是通过数据共享功能从外部文件输入几何的&#xff0c;文件输入以后&#xff0c;会转换成proe软件能够识别的几何&#xff0c;称为一个特征发布几何&#…

实验二:文件操作编程实验

一【实验目的】 1.掌握文件或目录属性信息的函数stat()函数的使用&#xff1b; 2.掌握目录操作的函数opendir 函数和readdir函数的使用&#xff1b; 3.编写程序mysearch.c递归实现打印输出任意目录下&#xff0c;指定类型的所有文件&#xff0c;如&#xff1a;./mysearch /hom…

数字类 default 0和 default 0_全方位的数字规划工具Visual Components 4.0 数字化工厂仿真软件...

Visual Components 是全方位的数字规划工具。无论从制程规划、生产到营销都能够整合在同一个平台上作业&#xff0c;有助于内部的技术沟通及外部营销。此外&#xff0c;Visual Components 整合了物流及机器人模拟功能&#xff0c;帮助企业在研发前期即可进行产能确认&#xff0…

python中写入csv文件的方法_Python写入CSV文件的方法

python笔记5-python2写csv文件中文乱码问题前言python2最大的坑在于中文编码问题&#xff0c;遇到中文报错首先加u&#xff0c;再各种encode、decode。当list、tuple、dict里面有中文时&#xff0c;打印出来的是Unicode编码&#xff0c;这个是无解的。对中文编码纠结的建议尽快…

实验三:进程管理编程实验

一【实验目的】 1.熟悉进程环境、进程生命周期&#xff1b; 2.支撑网络空间安全专业的专业核心能力、综合创新能力。 二【实验要求】 以下每个实验均要求&#xff1a; 1.“实验源代码”处&#xff1a;粘贴所编写的程序源码&#xff0c;务必添加关键语句的注释&#xff1b; 2…

会说话的狗狗本电脑版_会说话的电脑有点酷!惠普星14帮你解锁“偷懒”新姿势_惠普 星 14 2020(i5 1135G7/16GB/512GB/MX450)_笔记本新闻...

在现实生活中你是否遇到过这样的情况&#xff0c;笔记本近在咫尺&#xff0c;但你却懒得走到笔记本面前进行操作。当你疲惫地躺在床上时&#xff0c;心里也总是暗想&#xff0c;如果笔记本能够听我的指令跟我对话就好了。工作和生活当中&#xff0c;我们总免不了想要“偷懒”&a…

expect巡检服务器_Shell-批量巡检服务器脚本

文件说明该Shell脚本旨在针对大量Linux服务器的巡检提供一种相对自动化的解决方案。脚本组成有三部分&#xff1a;shellsh.sh、checksh.sh、file.txt&#xff1b;这三个文件需放在一个文件夹下以root权限执行&#xff0c;缺一不可。脚本用法将要巡检的服务器的IP地址和对应的密…

实验四:进程间通信编程实验

一【实验目的】 1.理解进程间通信原理&#xff1b; 2.掌握进程中信号量、共享内存、消息队列相关的函数的使用&#xff1b; 3.支撑网络空间安全专业的专业核心能力、综合创新能力。 二【实验要求】 以下每个实验均要求&#xff1a; 1.“实验源代码”处&#xff1a;粘贴所编写…

细粒度图像分类_1.1、 图片分类

记录图像分类论文资源列表。图片分类任务可以分为&#xff1a;粗粒度图片分类、细粒度图片分类。2012 AlexNet &#xff1a;ImageNet Classification with Deep Convolutional Neural Networks。2014 GoogLeNet&#xff1a;Going Deeper with Convolutions。Rethinking the Inc…

diy服务器个人主机_Re:从零开始的服务器-微型服务器DIY手记

国际象棋测试4-Chess Benchmark.png (25.64 KB, 下载次数: 63)2017-3-22 19:43 上传RAR benchmarkWinRAR自带的基准测试7-RARbench.png (15.8 KB, 下载次数: 54)2017-3-22 19:45 上传7-zip benchmark7zip自带的基准测试8-7zipbench.png (31.2 KB, 下载次数: 70)2017-3-22 19:45…

实验五:线程编程实验

一【实验目的】 1.理解线程环境、线程的生命周期&#xff0c; 2.理解线程同步&#xff0c;掌握内核函数的基本用法。 3.支撑网络空间安全专业的专业核心能力、综合创新能力。 二【实验要求】 以下每个实验均要求&#xff1a; 1.“实验源代码”处&#xff1a;粘贴所编写的程序…

where里能用max吗_超市里四五元钱的速冻饺子能买吗?

展开全部我家里都特别喜欢吃带馅的食物&#xff0c;尤其是我儿子只要是饺子和馄饨&#xff0c;吃起来准没够。62616964757a686964616fe59b9ee7ad9431333433653938包饺子虽然不是什么力气活&#xff0c;但是有时候做起来也感觉太过繁琐&#xff0c;尤其是孩子要吃的时候&#xf…