侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 238 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

clock_getcpuclockid函数用法详解

noerror
2022-10-14 / 0 评论 / 0 点赞 / 31 阅读 / 572 字 / 正在检测是否收录...

clock_getcpuclockid函数用法详解

clock_getcpuclockid函数简介

  • 头文件包含
#include <time.h>
  • 函数定义
int clock_getcpuclockid(pid_t  pid , clockid_t * clockid );
  • 编译链接选项
-lrt

clock_getcpuclockid函数常见使用错误

  • 链接错误
    undefined reference to `clock_getcpuclockid'
    解决办法:添加链接选项
-lrt
  • 编译错误
    warning: implicit declaration of function ‘clock_getcpuclockid’ [-Wimplicit-function-declaration]
    解决办法:包含头文件
#include <time.h>

clock_getcpuclockid函数详细描述

clock_getcpuclockid ()函数获取ID为pid 的进程的CPU-time时钟的ID,如果pid为零,则返回clockid 指向的位置,然后返回调用进程的CPU-time时钟的时钟ID。

clock_getcpuclockid函数返回值

成功时,clock_getcpuclockid ()返回0;出错时,它返回错误中列出的正错误号之一。

clock_getcpuclockid函数错误码

  • ENOSYS 内核不支持获取另一个进程的每个进程CPU时间时钟,pid不指定调用进程。
  • EPERM 调用方没有权限访问由pid 指定的进程的CPU时间时钟(在POSIX.1-2001中指定;除非内核不支持获取另一个进程的每个进程的CPU时间时钟,否则在Linux上不会发生。)
  • ESRCH 没有ID为pid 的进程

clock_getcpuclockid函数其他说明

使用通过使用pid为0调用clock_getcpuclockid ()获得的时钟ID调用clock_gettime (2),与使用时钟ID CLOCK_PROCESS_CPUTIME_ID 相同

clock_getcpuclockid函数使用举例

下面的示例程序获取命令行中给出ID的进程的CPU-time时钟ID,然后使用clock_gettime (2)获得该时钟上的时间。一个示例运行如下:

" ./a.out 1" "                 # Show CPU clock of init process"
CPU-time clock for PID 1 is 2.213466748 seconds

Program source&

#define _XOPEN_SOURCE 600
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>

int
main(int argc, char *argv[])
{
   clockid_t clockid;
   struct timespec ts;

   if (argc != 2) {
       fprintf(stderr, "%s <process\-ID>\en", argv[0]);
       exit(EXIT_FAILURE);
   }

   if (clock_getcpuclockid(atoi(argv[1]), &clockid) != 0) {
       perror("clock_getcpuclockid");
       exit(EXIT_FAILURE);
   }

   if (clock_gettime(clockid, &ts) == \-1) {
       perror("clock_gettime");
       exit(EXIT_FAILURE);
   }

   printf("CPU-time clock for PID %s is %jd.%09ld seconds\en",
           argv[1], (intmax_t) ts.tv_sec, ts.tv_nsec);
   exit(EXIT_SUCCESS);
}
0

评论区