URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1339
[ Назад ]

Исходное сообщение
"timer_create - не компиляется. блин"

Отправлено vvk , 31-Янв-03 22:25 
взял пример. а он не компиляется. взял другой - а он тоже не компиляется. на все вызовы методов таймера говорит: undefined reference to 'timer_cerate' и т.д.
компиляю g++ pp.c

что я не так делаю?
вот исходник на всякий пожарный.

#define _POSIX_C_SOURCE 199506L

#include<unistd.h>
#include<signal.h>
#include<time.h>
#include<stdio.h>

#define OUR_CLOCK CLOCK_REALTIME

char *prog_name;

void timer_intr(int sig, siginfo_t *extra, void *cruft)
{
        int noverflow;
        if(noverflow=timer_getoverrun(*(timer_t *)
                extra->si_value.sival_ptr)){
                /*timer has overflowed -- error !*/
        }
        return;
}

timer_t mytimer;

main(int argc, char **argv){
        int c;
        struct itimerspec i;
        struct timespec resolution;
        struct sigaction sa;
        sigset_t allsigs;
        struct sigevent timer_event;

        prog_name=argv[0];
        
        sigemptyset(&sa.sa_mask);
        sa.sa_flags=SA_SIGINFO;         /*real-time signal*/
        sa.sa_sigaction=timer_intr;     /*pointer to action*/

        if(sigaction(SIGRTMIN, &sa, NULL) < 0){
                perror("sigaction error");
                exit(1);
        }
        
        /*
         * first determine whether the desired clock exists
         */

        if (clock_getres(OUR_CLOCK, &resolution) < 0){
          perror("clock_getres error");
          exit(1);
        }

        printf("clock resolution %d sec %d nsec \n",
                resolution.tv_sec, resolution.tv_nsec);

        /*
         * create a timer based upon the CLOCK_REALTIME clock
         */

         i.it_interval.tv_sec=0;
        
        /* set resolution to one-tenth of the maximum allowed*/

         i.it_interval.tv_nsec=resolution.tv_nsec*10;
         i.it_value=i.it_interval;

        /*
         * this describes the asynchronous notification to be posted
         * upon this timer's expiration:
         *
         * - use signals
         * - send SIGRTMIN
         * - send extra data consisting of a pointer back to the timer ID
         *   cannot pass the timer ID itself because we haven't created it
         *   yet.
         */

         timer_event.sigev_notify=SIGEV_SIGNAL;
         timer_event.sigev_signo= SIGRTMIN;
         timer_event.sigev_value.sival_ptr = (void *)&mytimer;

         if (timer_create(OUR_CLOCK, &timer_event, &mytimer) < 0){
                perror("timer create error");
                exit(1);
         }
        
         /* relative timer, go off at the end of the interval*/

         if(timer_settime(mytimer, 0 , &i, NULL) < 0){
                perror("settimer");
                exit(3);
        }

        sigemptyset(&allsigs);
        while(1){
                sigsuspend(&allsigs);
        }
        exit(4);
}

Помогиииииииитееее!!!


Содержание

Сообщения в этом обсуждении
"RE: timer_create - не компиляется. блин"
Отправлено qq , 01-Фев-03 05:25 
надо подключить librt ключом -lrt
а вообще, найти в какой библиотеке лежат нужные тебе ф-ции, можно например так
for i in /lib/*.so /usr/lib/*.so /usr/local/lib*.so ;do objdump -T $i|grep timer_create && echo $i;done

"RE: timer_create - не компиляется. блин"
Отправлено vvk , 01-Фев-03 09:49 
ок, спасибо.
но почему об этом не пишут ни в доках ни в книжках! в одной доке написано было что надо делать -lposix.
Я вчера с горя заюзал обычный setitimer.
Все равно спасибо, пригодиться.