Подробности
[В начало]
Проблема в реализации № S0558
Краткое описание
Вызов timer_create() с clock_id, полученном при помощи clock_getcpuclockid(), приводит к ошибке EINVAL
Подробное описание
Функция timer_create() должна создать таймер процесса, использую часы, специфицированные параметром clock_id. Но вызов timer_create() с clock_id, полученном при помощи clock_getcpuclockid(), приводит к ошибке EINVAL.
Раздел стандарта
Linux Standard Base Core Specification 3.1, Chapter 13. Base Libraries, 13.17. Interfaces for librt, timer_create() function.
Пример
#include <stdio.h> #include <errno.h> #include <string.h> #include <signal.h> #include <time.h> int printResAndErrno( int res, const char * funcName, const char * funcArgs ) { int savedErrno = errno; printf( "%s%s is %d\n", funcName, funcArgs, res ); printf( "after %s( ... ) errno is %d ( %s )\n", funcName, savedErrno, strerror( savedErrno ) ); return savedErrno; } #define callPrintResAndErrno( func, pars ) printResAndErrno( ( errno = 0, func pars ), #func, #pars ) int main( int argc, char ** argv ) { clockid_t clockId; timer_t timerId; // prepare clockId callPrintResAndErrno( clock_getcpuclockid, ( 0, & clockId ) ); // find error if ( callPrintResAndErrno( timer_create, ( clockId, NULL, & timerId ) ) == EINVAL ) { // error found printf( "error : after timer_create( ... ) errno can not be %d ( %s )\n", EINVAL, strerror( EINVAL ) ); } else { // error not found printf( "no error\n" ); } return 0; }
Компонент
glibc 2.3.6 or earlier
Статус
Исправлена в glibc 2.4
[В начало]
»