Re: Поведение libc

2007-06-22 Пенетрантность Max Dmitrichenko
В сообщении от 21 Июнь 2007 18:50 Max Dmitrichenko написал(a):
> 
> Если её скомпилировать и слиноковать динамически с libc и librt, то все 
> работает.
> Если же это делать статически, то timer_create возвращает EINVAL, при этом, 
> если
> заменить CLOCK_MONOTONIC на CLOCK_REALTIME, то все опять работает. То есть 
> статическая
> версия libc почему-то не хочет создавать таймер, привязанный к 
> CLOCK_MONOTONIC,
> однако clock_getres работает для обоих типов линковки и с CLOCK_MONOTONIC, и 
> с CLOCK_REALTIME.
> 
> Проверено и в sarge, и в ethc. Кто-нибудь скажет, чем обусловлено такое 
> поведение?

Пытаюсь уже сам понять, ковыряясь в исходниках glibc. Только там как минимум две
реализации функции timer_create:
  1) nptl/sysdeps/pthread/timer_create.c
  2) nptl/sysdeps/unix/sysv/linux/timer_create.c

Как понять которая из них используется?

Тут есть вообще кто-нибудь, кто эти таймеры использовал?

--
  Макс


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Поведение libc

2007-06-22 Пенетрантность Max Dmitrichenko
В сообщении от 21 Июнь 2007 21:23 Yuri Kozlov написал(a):
> Я, конечно, не силён в этом, но судя по
> 
> http://www.opengroup.org/pubs/online/7908799/xsh/timer_create.html
> 
> CLOCK_REALTIME должен быть реализован везде, а остальное никто
> не обещал. :)
> Что и говорит ошибка
> [EINVAL]
> The specified clock ID is not defined.

На мой взгляд CLOCK_MONOTONIC должен быть либо реализован во всех функциях, 
либо нигде.
А получается что clock_getres работает всегда, а timer_create только когда 
прилинковано
динамически. Кроме того, CLOCK_MONOTONIC очевидно есть в 2.6 ядре. А в 2.4 
POSIX Real Time
не поддержан вообще.

--
  Макс


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Поведение libc

2007-06-21 Пенетрантность Yuri Kozlov

21.06.07, Max Dmitrichenko<[EMAIL PROTECTED]> написал(а):

Привет всем!

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

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

Я, конечно, не силён в этом, но судя по

http://www.opengroup.org/pubs/online/7908799/xsh/timer_create.html

CLOCK_REALTIME должен быть реализован везде, а остальное никто
не обещал. :)
Что и говорит ошибка
[EINVAL]
   The specified clock ID is not defined.
--
Regards,
Yuri Kozlov


Поведение libc

2007-06-21 Пенетрантность Max Dmitrichenko
Привет всем!

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

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

#include 
#include 
#include 

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. Кто-нибудь скажет, чем обусловлено такое 
поведение?

--
  Макс


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]