почему “timer_t” определяется в “time.h” на Linux, но не OS X

Работы для меня на Linuxmint 13 с Корицей 1.4.

  • cinnamon-settings desktop # в терминале> Удаляют галочку, "Позволяют файловому менеджеру обработать рабочий стол"
  • измените свои обои с feh
    feh --bg-fill ~/Images/my_wallpaper.png
10
05.04.2015, 19:28
2 ответа

UNIX и C имеют переплетую историю, поскольку они были оба Разработано примерно в то же время на Bell Labs в Нью-Джерси, а один из главных целей C должен был реализовать Unix, используя высокий уровень, архитектурный независимый, портативный язык. Тем не менее, не было никакой официальной стандартизации до 1983 года. POSIX , «Интерфейс портативной операционной системы» - это стандартная система операционной системы IEEE, датирующаяся верным времени «Unix Wars» Отказ С тех пор это развивается и теперь является наиболее широко реализованным таким стандартным. OSX Официально Posix совместится, и Linux неофициально является - есть логистика и затраты, связанные с официальным соблюдением, что Linux Distries не принимает участие.

Большая часть того, какой POSIX сосредоточился, является разработка вещей, не являющихся частью ISO C. Time.h - это, но версия ISO не включает в себя тип Timer_T или любые функции, которые его используют. Это из Расширение POSIX , следовательно, эта ссылка в заголовке Linux:

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

__ __s_Posix199309 - это внутренний символ GLIBC, который устанавливается в функциях. Когда _POSIX_C_Source> = 199309L , означает, что POSIX.1B должен поддерживаться (см. FACING_TEST_MACROS MANPAGE). Это также поддерживается с _xOpen_Source> = 600 .

Есть ли какие-либо по-разному определенные функции или атрибуты между разными ОС?

Я думаю, что в отношении C, среди POSIX Systems, есть усилия, чтобы избежать этого, но это происходит. Есть некоторые расширения GNU (например, STERROR_R () ), которые имеют несовместимые подписи из своих аналогов POSIX. Возможно, это происходит, когда Posix занимает расширение, но модифицирует его, или иначе они просто альтернативы, снабженные GNU - вы можете выбрать один или другой, используя подходящие #define .

11
27.01.2020, 20:02

timer_tиспользуется API-интерфейсами таймера _в POSIX, такими какtimer_create(). В версии POSIX для UNIX 03 это необязательная часть POSIX, и macOS не реализовала ее. Linux и Solaris и, возможно, некоторые другие UN *X.

Таким образом, код, на который вы смотрели, может работать в Linux и Solaris, но не будет работать в macOS, если Apple не реализует API-интерфейсы таймера в будущем. (Они являются частью текущей версии спецификации POSIX, поэтому Apple придется сделать это, если они хотят соответствовать версии 4, а не версии 3 спецификации.)

3
27.01.2020, 20:02

Теги

Похожие вопросы