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);
}
评论区