名 前
clock_getcpuclockid − プ ロ セ ス の CPU 時 刻 の ク ロ ッ ク ID を 取 得 す る
書 式
#include <time.h>
int clock_getcpuclockid(pid_t pid, clockid_t *clock_id);
−lrt と リ ン ク す る (バ ー ジ ョ ン 2.17 よ り 前 の glibc の み )
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
clock_getcpuclockid():
_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L
説 明
clock_getcpuclockid() 関 数 は 、 プ ロ セ ス ID が pid の プ ロ セ ス の CPU 時 刻 の ク ロ ッ ク ID を 取 得 し 、 そ の ID を clock_id が 指 す 場 所 に 入 れ て 返 す 。 pid が 0 の 場 合 、 呼 び 出 し 元 の プ ロ セ ス の CPU 時 刻 の ク ロ ッ ク ID が 返 さ れ る 。
返 り 値
成 功 す る と 、 clock_getcpuclockid() は 0 を 返 す 。 エ ラ ー の 場 合 、 「 エ ラ ー 」 の 節 の リ ス ト に あ る 正 の エ ラ ー 番 号 の い ず れ か を 返 す 。
エ ラ ー
ENOSYS カ ー ネ ル が 他 の プ ロ セ ス の プ ロ セ ス 単 位 の |
CPU 時 刻 の ク ロ ッ ク の 取 得 |
に 対 応 し て お ら ず 、 か つ pid が 呼 び 出 し 元 の プ ロ セ ス を 指 し て い な か っ た 。
EPERM 呼 び 出 し 元 プ ロ セ ス が |
pid で 指 定 さ れ た プ ロ セ ス の CPU 時 刻 の ク ロ ッ |
ク に ア ク セ ス す る 許 可 を 持 っ て い な か っ た 。 (POSIX.1−2001 で は 任 意 の エ ラ ー と し て 規 定 さ れ て い る 。 カ ー ネ ル が 他 の プ ロ セ ス の プ ロ セ ス 単 位 の CPU 時 刻 の ク ロ ッ ク の 取 得 に 対 応 し て い な い 場 合 に は 、 こ の エ ラ ー は 発 生 し な い 。 )
ESRCH |
ID が pid の プ ロ セ ス が 存 在 し な い 。 |
バ ー ジ ョ ン
clock_getcpuclockid() 関 数 は glibc バ ー ジ ョ ン 2.2 以 降 で 利 用 可 能 で あ る 。
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )
clock_getcpuclockid() 関 数 は ス レ ッ ド セ ー フ で あ る 。
準 拠
POSIX.1−2001.
注 意
pid に 0 を 指 定 し て clock_getcpuclockid() を 呼 び 出 し て 得 ら れ た ク ロ ッ ク ID を 引 き 数 と し て clock_gettime(2) の 呼 び 出 す の は 、 ク ロ ッ ク ID CLOCK_PROCESS_CPUTIME_ID を 使 っ て clock_gettime(2) の 呼 び 出 す の と 同 じ で あ る 。
例
以 下 の サ ン プ ル プ ロ グ ラ ム は 、 コ マ ン ド ラ イ ン で 指 定 さ れ た ID を 持 つ プ ロ セ ス の CPU 時 刻 の ク ロ ッ ク ID を 取 得 し 、 clock_gettime(2) を 使 っ て そ の ク ロ ッ ク の 時 刻 を 取 得 す る 。 以 下 は 実 行 例 で あ る 。
$ ./a.out
1 # Show CPU clock of init process
CPU−time clock for PID 1 is 2.213466748 seconds
プ ロ グ ラ ム の
ソ ー ス
#define _XOPEN_SOURCE 600
#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>\n",
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 %ld.%09ld seconds\n",
argv[1], (long) ts.tv_sec, (long) ts.tv_nsec);
exit(EXIT_SUCCESS); }
関 連 項 目
clock_getres(2), timer_create(2), pthread_getcpuclockid(3), time(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。