GNU/Linux >> Belajar Linux >  >> Linux

mengapa timer_t didefinisikan dalam time.h di Linux tetapi tidak pada OS X

Unix dan C memiliki sejarah yang saling terkait, karena keduanya dikembangkan sekitar waktu yang sama di Bell Labs di New Jersey dan salah satu tujuan utama C adalah untuk mengimplementasikan Unix menggunakan bahasa portabel tingkat tinggi, arsitektur independen, dan portabel. Namun, tidak ada standardisasi resmi hingga tahun 1983. POSIX, "antarmuka sistem operasi portabel" adalah standar sistem operasi IEEE sejak masa "Perang Unix". Ini telah berkembang sejak saat itu dan sekarang menjadi standar yang paling banyak diterapkan. OSX secara resmi sesuai dengan POSIX, dan linux secara tidak resmi -- ada logistik dan biaya yang terkait dengan kepatuhan resmi yang tidak diikuti oleh distro linux.

Banyak hal yang menjadi fokus POSIX adalah penjabaran hal-hal yang bukan bagian dari ISO C. Time.h adalah, tetapi versi ISO tidak menyertakan timer_t jenis atau fungsi apa pun yang menggunakannya. Itu dari ekstensi POSIX, karenanya referensi ini di header linux:

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

__USE_POSIX199309 adalah simbol glibc internal yang diatur di features.h saat _POSIX_C_SOURCE >= 199309L , artinya POSIX.1b harus didukung (lihat halaman manual feature_test_macros). Ini juga didukung dengan _XOPEN_SOURCE >= 600 .

apakah ada fungsi atau atribut yang berbeda di antara OS yang berbeda?

Saya pikir sehubungan dengan C, di antara sistem POSIX, ada upaya untuk menghindarinya, tetapi itu terjadi. Ada beberapa ekstensi GNU (mis. sterror_r() ) yang memiliki tanda tangan yang tidak kompatibel dari rekan POSIX mereka. Mungkin ini terjadi ketika POSIX menggunakan ekstensi tetapi memodifikasinya, atau itu hanyalah alternatif yang diimpikan oleh GNU -- Anda dapat memilih salah satu dengan menggunakan #define yang sesuai .


timer_t digunakan oleh timer_ API di POSIX, seperti timer_create() . Dalam POSIX versi UNIX 03, itu adalah bagian opsional dari POSIX, dan macOS tidak menerapkannya. Linux dan Solaris, dan mungkin beberapa UN*X lainnya, melakukannya.

Jadi kode yang Anda lihat mungkin berfungsi di Linux dan Solaris, tetapi tidak akan berfungsi di macOS, kecuali Apple mengimplementasikan API pengatur waktu di masa mendatang. (Mereka adalah bagian dari versi spesifikasi POSIX saat ini, jadi Apple harus melakukannya jika mereka ingin menyesuaikan dengan spesifikasi versi 4, bukan versi 3.)


Linux
  1. Apa itu POSIX? Mengapa Penting bagi Pengguna Linux/UNIX?

  2. Linux – Mengapa Kami Menggunakan Su – Dan Bukan Hanya Su?

  3. Linux – Mengapa Tidak Ada Sistem File Rootfs Di Sistem?

  1. Linux – Mengapa Setuid Tidak Bekerja??

  2. Linux – Mengapa Es_mx Lokal Bekerja Tapi Tidak Es?

  3. Apakah ada STDCALL di Linux?

  1. Mengapa Tomcat bekerja dengan port 8080 tetapi tidak dengan 80?

  2. Mengapa tidak ada API DirectX untuk Linux?

  3. Mengapa anggur dapat menjalankan program 64bit di Linux tetapi tidak di Mac?