GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué timer_t está definido en time.h en Linux pero no en OS X?

Unix y C tienen una historia entrelazada, ya que ambos se desarrollaron casi al mismo tiempo en Bell Labs en Nueva Jersey y uno de los propósitos principales de C era implementar Unix utilizando un lenguaje portátil de alto nivel, independiente de la arquitectura. Sin embargo, no hubo ninguna estandarización oficial hasta 1983. POSIX, la "interfaz de sistema operativo portátil" es un estándar de sistema operativo IEEE que se remonta a la época de las "Guerras de Unix". Ha ido evolucionando desde entonces y ahora es el estándar de este tipo más ampliamente implementado. OSX es oficialmente compatible con POSIX, y Linux no es oficial:hay logística y costos asociados con el cumplimiento oficial en los que las distribuciones de Linux no participan.

Gran parte de lo que POSIX se ha centrado es la elaboración de cosas que no forman parte de ISO C. Time.h sí lo es, pero la versión ISO no incluye el timer_t type o cualquier función que lo utilice. Esos son de la extensión POSIX, de ahí esta referencia en el encabezado de Linux:

#if !defined __timer_t_defined && \
((defined _TIME_H && defined __USE_POSIX199309)

El __USE_POSIX199309 es un símbolo glibc interno que se establece en características.h cuando _POSIX_C_SOURCE >= 199309L , lo que significa que se admitirá POSIX.1b (consulte la página de manual de feature_test_macros). Esto también es compatible con _XOPEN_SOURCE >= 600 .

¿Hay funciones o atributos definidos de manera diferente entre diferentes sistemas operativos?

Creo que con respecto a C, entre los sistemas POSIX, hay un esfuerzo por evitar eso, pero sucede. Hay algunas extensiones GNU (por ejemplo, sterror_r() ) que tienen firmas incompatibles de sus contrapartes POSIX. Posiblemente esto suceda cuando POSIX toma la extensión pero la modifica, o simplemente son alternativas ideadas por GNU; puede optar por una u otra usando un #define apropiado. .


timer_t es utilizado por las API de timer_ en POSIX, como timer_create() . En la versión UNIX 03 de POSIX, son una parte opcional de POSIX y macOS no la implementó. Linux y Solaris, y posiblemente algunos otros UN*X, lo hicieron.

Entonces, el código que estaba viendo podría funcionar en Linux y Solaris, pero no funcionará en macOS, a menos que Apple implemente las API del temporizador en el futuro. (Son parte de la versión actual de la especificación POSIX, por lo que Apple tendrá que hacerlo si quiere cumplir con la versión 4, en lugar de la versión 3, de la especificación).


Linux
  1. Linux:¿Kali Linux está instalado pero no se muestra en el Administrador de arranque?

  2. Linux:¿por qué el USB no funciona en Linux cuando funciona en Uefi/bios?

  3. Linux:¿por qué existe una política de kernel de Linux para nunca romper el espacio del usuario?

  4. Linux:¿por qué Rsync en Linux no conserva todas las marcas de tiempo (hora de creación)?

  5. ¿Hay STDCALL en Linux?

Comando de tiempo de Linux

Linux Mint 20 Ulyana Xfce - No del todo

¿Linux cómo copiar pero no sobrescribir?

¿Por qué Linux/POSIX tiene lchown pero no lchmod?

¿Por qué Wine puede ejecutar programas de 64 bits en Linux pero no en Mac?

¿Hay una distribución de Linux que esté certificada por UNIX?