GNU/Linux >> Znalost Linux >  >> Linux

proč je timer_t definován v time.h v Linuxu, ale ne v OS X

Unix a C mají vzájemně propojenou historii, protože byly oba vyvinuty přibližně ve stejnou dobu v Bell Labs v New Jersey a jedním z hlavních účelů C bylo implementovat Unix pomocí vysokoúrovňového přenosného jazyka nezávislého na architektuře. Do roku 1983 však neexistovala žádná oficiální standardizace. POSIX, „rozhraní přenosného operačního systému“ je standardem IEEE operačního systému, který se datuje do doby „Unixových válek“. Od té doby se vyvíjí a nyní je nejrozšířenějším takovým standardem. OSX je oficiálně kompatibilní s POSIX a linux neoficiálně ano – s oficiálním dodržováním jsou spojeny logistika a náklady, na kterých se linuxové distribuce nepodílejí.

Hodně z toho, na co se POSIX zaměřil, je vypracování věcí, které nejsou součástí ISO C. Time.h je, ale verze ISO neobsahuje timer_t typu nebo funkcí, které jej používají. Ty jsou z rozšíření POSIX, proto tento odkaz v linuxové hlavičce:

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

__USE_POSIX199309 je interní symbol glibc, který je nastaven ve features.h při _POSIX_C_SOURCE >= 199309L , což znamená, že má být podporován POSIX.1b (viz manuálová stránka feature_test_macros). Toto je také podporováno s _XOPEN_SOURCE >= 600 .

existují nějaké odlišně definované funkce nebo atributy mezi různými OS?

Myslím, že pokud jde o C, mezi systémy POSIX existuje snaha se tomu vyhnout, ale stává se to. Existují některá rozšíření GNU (např. sterror_r() ), které mají nekompatibilní podpisy od svých protějšků POSIX. Možná se to stane, když POSIX převezme rozšíření, ale upraví ho, nebo jsou to jen alternativy, které si GNU vymyslelo – můžete se rozhodnout pro jedno nebo druhé pomocí vhodného #define .


timer_t je používáno API timer_ v POSIX, jako je timer_create() . Ve verzi POSIX pro UNIX 03 jsou volitelnou součástí POSIX a macOS ji neimplementoval. Linux a Solaris a možná i některé další UN*X ano.

Takže kód, na který jste se dívali, může fungovat na Linuxu a Solarisu, ale nebude fungovat na macOS, pokud Apple v budoucnu neimplementuje API časovače. (Jsou součástí aktuální verze specifikace POSIX, takže to Apple bude muset udělat, pokud bude chtít vyhovět verzi 4, spíše než verzi 3 specifikace.)


Linux
  1. Linux – Kali Linux je nainstalován, ale nezobrazuje se ve správci spouštění?

  2. Linux – Proč Setuid nefunguje?

  3. Linux – Proč Locale Es_mx funguje, ale Es ne?

  1. Linux – Proč existuje zásada jádra Linuxu, která nikdy nenaruší uživatelský prostor?

  2. Existuje STDCALL v Linuxu?

  3. Linux jak kopírovat, ale nepřepisovat?

  1. Linux – proč používáme Su – a nejen Su?

  2. Proč mají Linux/POSIX lchown, ale ne lchmod?

  3. Existuje distribuce Linuxu s certifikací UNIX?