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?