Manpages

名 前

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/ に 書 か れ て い る 。