Usar encabezados de kernel en time real para comstackr código de espacio de usuario frente a encabezados pnetworkingeterminados

Según los requisitos del cliente, instalé CentOS 5.6 con el kernel pnetworkingeterminado. Con este kernel instalado, el file time.h incluye #define CLOCK_MONOTONIC .

Ahora, se instaló un kernel en time real junto con kernel-devel y nuestro código desea usar CLOCK_MONOTONIC_RAW . Existe como parte de los files de encabezado del kernel, pero cuando compilo nuestro código, no lo encuentra en el espacio de usuario estándar incluido.

Mi pregunta es, ¿cuál es el procedimiento adecuado para include / replace el time.h encontrado por defecto con el kernel en time real? De mi investigación, parece que los enlaces simbólicos son malos, entonces, ¿cómo se debe manejar? ¿Cuál es el procedimiento o process? La actualización a CentOS 6.0 o 5.7 no es una opción según los requisitos del cliente.

Hay una distinción key sobre dónde provienen los files de cabecera:

  • <time.h> es proporcionado por glibc (por ejemplo, el glibc-headers )
  • <linux/time.h> es proporcionado por los encabezados del kernel de Linux.

Cambiar el kernel y sus packages de encabezado no afectará a <time.h> . Solo cambiar glibc hará eso.

Debería encontrar que <time.h> incluye <bits/time.h> que se resuelve como, por ejemplo, /usr/include/x86_64-linux-gnu/bits/time.h y define CLOCK_MONOTONIC_RAW . Si no lo hace, y no puede actualizarlo, tendrá que recurrir a include un código como este:

 #include <time.h> #ifndef CLOCK_MONOTONIC_RAW # define CLOCK_MONOTONIC_RAW 4 #endif 

Solo necesita #include <linux/time.h>

Los encabezados que instala su distribución no son los que están en el kernel, son versiones sanded / "userspaced". Tendría que get una copy de los encabezados en include / linux en las fonts del kernel y configurarlos de modo que se utilicen con preference a los de / usr / include / linux (es necesario include el indicador -I para gcc). Y revisa si nada falla.

Me aseguraría de build contra los encabezados que vienen con el kernel nuevo. CLOCK_MONOTONIC_RAW debe definirse en linux/time.h Primero averigüe qué encabezados está utilizando y compruebe cómo se define en el file. Puede definirlo en su código (solo como un control) para ver qué sucede.