无法设置进程时钟的时间,我需要一些权限吗?
Unable to set time of process clock, do I need some privileges?
在我的 C 程序中,我尝试使用命令 clock_settime(CLOCK_PROCESS_CPUTIME_ID,...)
设置进程时钟的时间,但我收到无效参数错误 EINVAL
。
#include<time.h>
#include<stdio.h>
int main(void)
{
struct timespec a;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&a);
fprintf(stdout,"Current process time: %d %d\n",a.tv_sec,a.tv_nsec);
a.tv_sec=0;
a.tv_nsec=0;
fprintf(stdout,"Resetting process time status: %d\n",clock_settime(CLOCK_PROCESS_CPUTIME_ID,&a));
clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&a);
fprintf(stdout,"Current process time: %d %d\n",a.tv_sec,a.tv_nsec);
return 0;
}
跟踪输出:
clock_settime(CLOCK_PROCESS_CPUTIME_ID, {0, 0}) = -1 EINVAL (Invalid argument)
write(1, "Resetting process time status: -"..., 34Resetting process time status: -1
这是我第一次摆弄时钟。我需要一些权限才能设置这个时钟的时间,还是存在一些逻辑错误?
在 Linux 上,CLOCK_PROCESS_CPUTIME_ID
和 CLOCK_THREAD_CPUTIME_ID
时钟不可设置。这在 man 2 clock_getres 联机帮助页的各个地方都有说明,包括上面链接的 NOTES
部分:
According to POSIX.1-2001, a process with "appropriate privileges" may set the CLOCK_PROCESS_CPUTIME_ID
and CLOCK_THREAD_CPUTIME_ID
clocks using clock_settime()
. On Linux, these clocks are not settable (i.e., no process has "appropriate privileges").
(该文本大约一年前从 BUGS
移动到 NOTES
,因此如果您最近没有更新联机帮助页,您会在 BUGS
中找到它,接近尾声。大约在移动到 NOTES
的同时,在两个时钟的单独描述中也有注明。)
联机帮助页的最新版本还列出了 EINVAL
return 代码的可能原因(这始终是可能的原因,但最近才记录)。
在我的 C 程序中,我尝试使用命令 clock_settime(CLOCK_PROCESS_CPUTIME_ID,...)
设置进程时钟的时间,但我收到无效参数错误 EINVAL
。
#include<time.h>
#include<stdio.h>
int main(void)
{
struct timespec a;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&a);
fprintf(stdout,"Current process time: %d %d\n",a.tv_sec,a.tv_nsec);
a.tv_sec=0;
a.tv_nsec=0;
fprintf(stdout,"Resetting process time status: %d\n",clock_settime(CLOCK_PROCESS_CPUTIME_ID,&a));
clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&a);
fprintf(stdout,"Current process time: %d %d\n",a.tv_sec,a.tv_nsec);
return 0;
}
跟踪输出:
clock_settime(CLOCK_PROCESS_CPUTIME_ID, {0, 0}) = -1 EINVAL (Invalid argument)
write(1, "Resetting process time status: -"..., 34Resetting process time status: -1
这是我第一次摆弄时钟。我需要一些权限才能设置这个时钟的时间,还是存在一些逻辑错误?
在 Linux 上,CLOCK_PROCESS_CPUTIME_ID
和 CLOCK_THREAD_CPUTIME_ID
时钟不可设置。这在 man 2 clock_getres 联机帮助页的各个地方都有说明,包括上面链接的 NOTES
部分:
According to POSIX.1-2001, a process with "appropriate privileges" may set the
CLOCK_PROCESS_CPUTIME_ID
andCLOCK_THREAD_CPUTIME_ID
clocks usingclock_settime()
. On Linux, these clocks are not settable (i.e., no process has "appropriate privileges").
(该文本大约一年前从 BUGS
移动到 NOTES
,因此如果您最近没有更新联机帮助页,您会在 BUGS
中找到它,接近尾声。大约在移动到 NOTES
的同时,在两个时钟的单独描述中也有注明。)
联机帮助页的最新版本还列出了 EINVAL
return 代码的可能原因(这始终是可能的原因,但最近才记录)。