0

私を助けてください、私はubuntoでcを使用してタイマーを実装したいと思います。私はコードを書きましたが、2つのエラーが発生しています。gccの-lrtオプションを使用してコンパイルしています。私が取得しているエラーは次のとおりです。timer1.c:関数'main'内:timer1.c:18:52:エラー:'SIG'が宣言されていません(この関数で最初に使用)timer1.c:18:52:注:宣言されていない各識別子timer1.c:21:23に表示される関数ごとに1回だけ報告されます:エラー:'handler'が宣言されていません(この関数での最初の使用)

私のコードは次のとおりです。

#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 %d\n", 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%lx\n", (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 signal\n");
        } 
  else 
    {
        printf("Caught signal from timer\n");
        }


}
4

1 に答える 1

1

SIG宣言されていないため宣言されていません。また、それがどうあるべきかわからないため、修正方法を教えることもできません。handler前方宣言を忘れたため、宣言されていません。関数シグネチャのコピーを、それが使用される関数の前にセミコロンを付けて配置します。

static void handler(int sig, siginfo_t *si, void *uc);

int main(int argc, char *argv[])
{
   ...
于 2012-10-09T18:25:00.097 に答える