当前位置: 首页 > news >正文

在Linux中使用 times函数 和 close函数 两种方式 打印进程时间。

times函数用于获取当前进程时间,其函数原型如下所示:

#include <sys/times.h>
clock_t times(struct tms *buf);  //使用该函数需要包含头文件<sys/times.h>。

函数参数和返回值含义如下:
         buf:times()会将当前进程时间信息存在一个 struct tms 结构体数据中,所以我们需要提供 struct tms 变量,使用参数 buf 指向该变量 。

        返回值:返回值类型为 clock_t(实质是 long 类型),调用成功情况下,将返回从过去任意的一个时间点(譬如系统启动时间)所经过的时钟滴答数(其实就是系统节拍数),将(节拍数 / 节拍率)便可得到秒数,返回值可能会超过 clock_t 所能表示的范围(溢出);调用失败返回-1,并设置 errno。

        如果我们想查看程序运行到某一个位置时的进程时间,或者计算出程序中的某一段代码执行过程所花费的进程时间,都可以使用 times()函数来实现。

struct tms {
 clock_t tms_utime; /* user time, 进程的用户 CPU 时间, tms_utime 个系统节拍数 */

clock_t tms_stime; /* system time, 进程的系统 CPU 时间, tms_stime 个系统节拍数 */
clock_t tms_cutime; /* user time of children, 已死掉子进程的 tms_utime + tms_cutime 时间总和 */
clock_t tms_cstime; /* system time of children, 已死掉子进程的 tms_stime + tms_cstime 时间总和 */
}; 

代码示例:

#include<stdio.h>
#include<stdlib.h>
#include<sys/times.h>
#include<unistd.h>int main(int argc ,char *agrv[])
{struct      tms     t_buf_start;struct      tms     t_buf_end;clock_t     t_start; clock_t     t_end;long    tck;int     i , j;/*获取系统的节拍率*/tck = sysconf(_SC_CLK_TCK);/*开始时间*/t_start     =    times(&t_buf_start);if (-1 == t_start){perror("times  error\n");exit(-1);}/*需要测试的代码段*/for ( i = 0; i < 20000; i++){// }for ( j = 0; j < 20000; j++){/* code */}sleep(1);   //休眠挂起/*结束时间*/t_end   =   times(& t_buf_end);if (-1 == t_end){/* code */perror("times error\n");exit(-1);}/*打印时间*/printf("时间总和: %f 秒\n", (t_end - t_start) / (double)tck);printf("用户 CPU 时间: %f 秒\n", (t_buf_end.tms_utime - t_buf_start.tms_utime) / (double)tck);printf("系统 CPU 时间: %f 秒\n", (t_buf_end.tms_stime - t_buf_start.tms_stime) / (double)tck);exit(0);}

 运行结果:

clock 函数
库函数 clock()提供了一个更为简单的方式用于进程时间,它的返回值描述了进程使用的总的 CPU 时间(也就是进程时间,包括用户 CPU 时间和系统 CPU 时间),其函数原型如下所示:

#include <time.h>
clock_t clock(void);

使用该函数需要包含头文件<time.h>。

 函数参数和返回值含义如下:
无参数。
返回值:返回值是到目前为止程序的进程时间,为 clock_t 类型,注意 clock()的返回值并不是系统节拍
数,如果想要获得秒数,请除以 CLOCKS_PER_SEC(这是一个宏)。如果返回的进程时间不可用或其值无
法表示,则该返回值是-1。
clock()函数虽然可以很方便的获取总的进程时间,但并不能获取到单独的用户 CPU 时间和系统 CPU 时
间,在实际编程当中,根据自己的需要选择。

代码示例:

#include<stdio.h>
#include<stdlib.h>
#include<sys/times.h>
#include<unistd.h>#define CLOCKS_PER_SEC  ((__clock_t) 1000000)
int clock();
int main(int argc ,char *agrv[])
{struct      tms     t_buf_start;struct      tms     t_buf_end;clock_t     t_start; clock_t     t_end;long    tck;int     i , j;/* 开始时间 */t_start = clock();if (-1 == t_start)exit(-1);/* *****需要进行测试的代码段***** */for (i = 0; i < 20000; i++)for (j = 0; j < 20000; j++);/* *************end************** *//* 结束时间 */t_end = clock();if (-1 == t_end)exit(-1);/* 打印时间 */
printf("总的 CPU 时间: %f\n", (t_end - t_start) / (double)CLOCKS_PER_SEC);
exit(0);
}

运行结果:

http://www.xdnf.cn/news/418123.html

相关文章:

  • 线代第二章矩阵第八节逆矩阵、解矩阵方程
  • 【计算机视觉】OpenCV项目实战:基于face_recognition库的实时人脸识别系统深度解析
  • 光谱相机的光电信号转换
  • 基于Java的家政服务平台设计与实现(代码+数据库+LW)
  • 游戏引擎学习第277天:稀疏实体系统
  • GNU Screen 曝多漏洞:本地提权与终端劫持风险浮现
  • 前端如何应对精确数字运算?用BigNumber.js解决JavaScript原生Number类型在处理大数或高精度计算时的局限性
  • SQL中联表的运用
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——mqtt库
  • WSL 安装 Debian 12 后,Linux 如何安装 nginx ?
  • Boby家族之Smart Boby:你的智能编程助手
  • YOLOv11融合[AAAI2025]的PConv模块
  • [51单片机]---DS18B20 温度检测
  • 第六节第二部分:抽象类的应用-模板方法设计模式
  • vim 练习题
  • 苍穹外卖--新增菜品
  • 按键精灵ios脚本新增元素功能助力辅助工具开发(一)
  • 机器学习07-归一化与标准化
  • mybatis中${}和#{}的区别
  • 【RabbitMQ】工作队列和发布/订阅模式的具体实现
  • 微服务八股(自用)
  • React Native告别图标体积大手动更换慢的噩梦:让图标更新像修改文字一样简单
  • 聊一聊Electron中Chromium多进程架构
  • 数据结构day1
  • 使用 IntelliJ IDEA 和 Maven 创建 Spark 项目
  • 云原生|kubernetes|kubernetes的etcd集群备份策略
  • 高防服务器部署实战:从IP隐匿到协议混淆
  • Scala和Go差异
  • 【面试 · 三】react大集合(类式/函数式)
  • 需求与技术实现不匹配,如何协调