Conflitos de declaração entre time.he linux / time.h me impedem de usar CLOCK_TAI

Eu gostaria de usar

#include <time.h>
clock_gettime(CLOCK_TAI, &...);

mas infelizmenteCLOCK_TAI não está definido em estoquetime.h cabeçalho (no openSUSE 13.2 pelo menos). No entanto, é definido emlinux / time.h e realmente suportado pelo sistema operacional. Mas se eu incluir o último cabeçalho, ele provocará muitos conflitos de declaração - contra ambostime.h ebits / types.h. Incluindo apenas olinux / time.h não ajuda, comotime.h e / oubits / types.h serão implicitamente incluídos por cabeçalhos comuns, comounistd.h oustdlib.h, de qualquer forma.

Então, eu tentei resolver conflitos manualmente. Particularmente, a primeira mensagem de erro do compilador foi sobretimespec redeclaração, então eu escrevi no meu código:

#include <time.h>
#if defined(__timespec_defined) && !defined(_STRUCT_TIMESPEC)
    #define _STRUCT_TIMESPEC
#endif
#include <linux/time.h>

Funcionou, mas não sem mais um conflito comitimerspec redeclaração, que é declarada incondicionalmente em ambos os cabeçalhos e não é concluída com definições de quaisquer guardas de inclusão. Então eu decidi banir implícitotime.h inclusão completamente:

#include <linux/time.h>
#ifndef _TIME_H
    #define _TIME_H
#endif

Isso continuou com o compilador reclamando sobretimeval redeclaração. Então eu bani implícitobits / types.h inclusão também:

#include <linux/time.h>
#ifndef _TIME_H
    #define _TIME_H
#endif
#ifndef _BITS_TYPES_H
    #define _BITS_TYPES_H
#endif

Tudo bem, mas isso também remove importantes declarações básicas, sobre as quais tipos comuns, comosize_t são baseados. Então eu tentei ir na direção oposta e desativarlinux / types.h inclusão:

#ifndef _LINUX_TYPES_H
    #define _LINUX_TYPES_H
#endif
#include <linux/time.h>
#ifndef _TIME_H
    #define _TIME_H
#endif

Como você pode imaginar, resultou em tipos específicos do sistema, como__kernel_time_t falta, o que levou à incapacidade de declarartimespec e assim por diante.

Então, eu estou me perguntando: é possível usarlinux /… cabeçalhos em combinação comstdlib.h e outros arquivos normalmente incluídos? Existem outras maneiras de acessar informações específicas do sistemaCLOCK_TAI valor?

questionAnswers(0)

yourAnswerToTheQuestion