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.)