[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Поведение libc



Привет всем!

Столкнулся с проблемой и не знаю от чего она и как её побороть.

Вот тупая программа:

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

void my_alarm(sigval_t t)
{
    return;
}

int main(int argc, char** argv)
{
    int rc;
    struct sigevent sigevent;
    timer_t tmrid;

    sigevent.sigev_notify            = SIGEV_THREAD;
    sigevent.sigev_value.sival_ptr   = 0;
    sigevent.sigev_notify_function   = my_alarm;
    sigevent.sigev_notify_attributes = 0;

    rc = timer_create(CLOCK_MONOTONIC, &sigevent, &tmrid);

    if (rc == -1) {
        perror("Error");
        return 1;
    }

    return 0;
}

Если её скомпилировать и слиноковать динамически с libc и librt, то все работает.
Если же это делать статически, то timer_create возвращает EINVAL, при этом, если
заменить CLOCK_MONOTONIC на CLOCK_REALTIME, то все опять работает. То есть статическая
версия libc почему-то не хочет создавать таймер, привязанный к CLOCK_MONOTONIC,
однако clock_getres работает для обоих типов линковки и с CLOCK_MONOTONIC, и с CLOCK_REALTIME.

Проверено и в sarge, и в ethc. Кто-нибудь скажет, чем обусловлено такое поведение?

--
  Макс



Reply to: