我正在填充timespec结构。其目的是,用户总是以秒为单位输入值(也可以是0.01秒),因此我们使用:lt_leak_start = atoll(getenv("LT_LEAK_START")) * sec_to_nsec;where variablestatic 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);
}

最佳答案

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中,将纳秒部分存储在tv中。

10-01 08:30