我正在填充timespec结构。目的是,用户将始终以秒为单位输入值(也可以是0.01秒),因此我们使用:lt_leak_start = atoll(getenv("LT_LEAK_START")) * sec_to_nsec;
将变量static long sec_to_nsec = 1000000000;
转换为纳秒,然后将其用作settime的参数:timer_settime(timerid,0,&its,NULL)
。但在这样做时会出现错误:settimer failed: Invalid argument
请帮帮我。
提前致谢。
enter code here
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */
};
struct itimerspec {
struct timespec it_interval; /* Timer interval */
struct timespec it_value; /* Initial expiration */
};
我正在尝试的代码在这里:
static long sec_to_nsec = 1000000000;
lt_leak_start = atoll(getenv("LT_LEAK_START")) * sec_to_nsec;
/* Setting timer interval */
its.it_interval.tv_sec=0;
its.it_interval.tv_nsec=1;
/* Setting timer expiration */
its.it_value.tv_sec=0; // First expiry after 1 sec
its.it_value.tv_nsec=lt_leak_start;
timer_create(CLOCK_REALTIME,&sevp,&timerid);
if(timer_settime(timerid,0,&its,NULL)==-1) {
perror("settimer failed");
exit(1);
}
答案 0 :(得分:2)
tv_nsec
不得大于999,999,999。你设置的大于此值。
答案 1 :(得分:2)
double d = strtod(getenv("LT_LEAK_START"), 0);
...
its.it_value.tv_sec=(time_t) d;
its.it_value.tv_nsec=(d - (time_t) d) * sec_to_nsec;
将环境变量读取为double。将第二部分存储在tv_sec中,将纳秒部分存储在tv_nsec中。