请帮助我,我想在 ubunto 中使用 c 实现计时器。 我已经编写了代码,但它给出了两个错误。我正在使用 gcc 的 -lrt 选项编译它。我得到的错误是:timer1.c: 在函数 'main' 中:timer1.c:18:52:错误:"SIG"未声明(首次在此函数中使用)timer1.c:18:52:注意:每个未声明的标识符只报告一次,每个函数出现在timer1.c:21:23:错误:"处理程序"未声明(首次在此函数中使用)
我的代码是:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <time.h>
timer_t timerid;
int main(int argc, char *argv[])
{
struct sigevent sev;
struct itimerspec its;
long long freq_nanosecs;
sigset_t mask;
struct sigaction sa;
printf("Establishing handler for signal %dn", SIG);
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = handler;
sigemptyset(&sa.sa_mask);
sev.sigev_notify = SIGEV_SIGNAL;
sev.sigev_signo = SIG;
sev.sigev_value.sival_ptr = &timerid;
printf("timer ID is 0x%lxn", (long) timerid);
// timer_create(CLOCKID, &sev, &timerid);
/* Start the timer */
its.it_value.tv_sec = 1000;
its.it_value.tv_nsec =0;
its.it_interval.tv_sec = its.it_value.tv_sec;
its.it_interval.tv_nsec = its.it_value.tv_nsec;
timer_settime(timerid,0, &its, NULL);
sleep(10);
}
static void handler(int sig, siginfo_t *si, void *uc)
{
if(si->si_value.sival_ptr != &timerid)
{
printf("Stray signaln");
}
else
{
printf("Caught signal from timern");
}
}
SIG
是未声明的,因为你从不声明它,我们无法告诉你如何修复它,因为我们不知道它应该是什么。 handler
未声明,因为您忘记了前向声明。将函数签名的副本后跟分号放在使用它的函数之前。
static void handler(int sig, siginfo_t *si, void *uc);
int main(int argc, char *argv[])
{
...