it-swarm-id.com

Apa sebenarnya POSIX?

Saya melihat POSIX sering disebutkan dan di mana-mana, dan saya telah menganggapnya sebagai standar UNIX standar .. sampai saya perhatikan kutipan berikut pada halaman Wikipedia: Grup Terbuka

Open Group paling terkenal sebagai badan sertifikasi untuk merek dagang UNIX, dan penerbitan standar teknis Spesifikasi Tunggal UNIX , yang memperluas standar POSIX dan merupakan definisi resmi sistem UNIX .

Jika definisi resmi sistem UNIX adalah perpanjangan dari POSIX, lalu apa sebenarnya POSIX? , Ini sepertinya menjadi batu ujian bagi dunia UNIX, tapi saya tidak tahu bagaimana itu cocok dengan gambaran keseluruhan.

144
Peter.O

POSIX pertama adalah standar pada tahun 1988 jauh sebelum Spesifikasi UNIX Tunggal. Itu adalah salah satu upaya untuk menyatukan semua berbagai garpu UNIX dan sistem seperti UNIX. POSIX adalah Standar IEEE, tetapi karena IEEE tidak memiliki merek dagang UNIX®, standarnya bukan UNIX® meskipun didasarkan pada API UNIX yang ada saat itu. Standar POSIX.1 pertama secara resmi dikenal sebagai IEEE std 1003.1-1988. [ 1 ] IEEE membebankan biaya besar untuk mendapatkan salinan standar.

Open Group merilis Spesifikasi Tunggal UNIX (SUSv2) pada tahun 1997 berdasarkan karya IEEE dari standar POSIX. SUSv3 dirilis pada tahun 2001 dari kelompok kerja bersama antara IEEE dan Grup Terbuka yang dikenal sebagai Grup Austin. SUSv3 juga dikenal sebagai POSIX: 2001 [ 2 ]. Sekarang ada juga POSIX: 2004 dan POSIX: 2008 yang merupakan inti dari SUSv4. Adapun apa itu UNIX®, UNIX® adalah apa pun yang terdaftar saat ini . Sejak 1994, itulah The Open Group.

Novell memperoleh bisnis sistem UNIX® dari AT&T/USL yang merupakan tempat kelahiran UNIX®. Pada tahun 1994, mereka menjual hak atas merek dagang UNIX® kepada X/Open [] yang sekarang dikenal sebagai The Open Group. Mereka kemudian menjual kode sumber UNIX® ke SCO sebagai UNIXWARE®. [] UNIX® sendiri telah melakukan forked berkali-kali [ 4 ] [ 5 ] sebagian karena model lisensi AT&T. Pembelian UNIX® memberi Anda sumber lengkap sistem operasi dan rantai alat lengkap untuk membangunnya. Modifikasi ke sumber dapat didistribusikan dan digunakan oleh siapa saja yang memiliki lisensi untuk UNIX® dari AT&T. Biaya lisensi ada ribuan.

BSD adalah proyek di Berkeley yang menambahkan sejumlah perangkat tambahan ke sistem operasi UNIX®. Kode BSD dirilis di bawah lisensi yang jauh lebih liberal daripada sumber AT&T dan tidak memerlukan biaya lisensi atau bahkan persyaratan untuk didistribusikan dengan sumber, tidak seperti GPL yang digunakan oleh Proyek GNU Proyek dan Linux. Hal ini menyebabkan sebagian kode BSD disertakan dengan berbagai garpu UNIX komersial. Pada sekitar 4.3BSD, mereka hampir mengganti semua kebutuhan untuk kode sumber AT&T UNIX® asli. FreeBSD/NetBSD/OpenBSD semuanya adalah garpu dari 4.3BSD yang merupakan sistem operasi lengkap dan tidak memiliki kode sumber AT&T asli. Mereka juga tidak memiliki hak atas merek dagang UNIX®, tetapi sebagian besar kode mereka digunakan oleh sistem operasi UNIX komersial. API Socket yang digunakan pada UNIX dikembangkan pada BSD dan kode Unix Fast Filesystem dipinjam dan digunakan pada berbagai Sistem Operasi UNIX seperti Solaris dengan perangkat tambahan mereka sendiri.

Linux dikembangkan pada tahun 1991, tetapi dikembangkan dari awal tidak seperti BSD dan menggunakan Proyek GNU yang ada, yang merupakan implementasi ruang bersih dari banyak ruang pengguna UNIX. Ia mengimplementasikan banyak POSIX untuk kompatibilitas dan mirip-UNIX dalam desain, tetapi tidak memiliki koneksi dekat dengan AT&T atau UNIX® yang dimiliki oleh BSD.

130
penguin359

Hal terpenting POSIX 7 mendefinisikan

  1. C API

    Sangat hebat extends ANSI C dengan hal-hal seperti:

    • lebih banyak operasi file: mkdir, dirname, symlink, readlink, link (hardlink), poll() , stat, sync, nftw()
    • proses dan utas: fork, execl, wait , pipe, semafor sem_* , memori bersama (shm_*), kill, parameter penjadwalan (Nice, sched_*), sleep, mkfifo, setpgid()
    • jaringan: socket()
    • manajemen memori: mmap, mlock, mprotect, madvise, brk()
    • utilities: ekspresi reguler (reg*)

    API tersebut juga menentukan konsep sistem yang mendasari di mana mereka bergantung, mis. fork membutuhkan konsep proses.

    Banyak panggilan sistem Linux ada untuk mengimplementasikan fungsi POSIX C API tertentu dan membuat Linux patuh, mis. sys_write, sys_read, ... Banyak dari syscalls tersebut juga memiliki ekstensi khusus Linux.

    Implementasi desktop utama Linux: glibc, yang dalam banyak kasus hanya menyediakan pembungkus dangkal untuk panggilan sistem.

  2. tilitas CLI

    E.g .: cd, ls, echo, ...

    Banyak utilitas adalah ujung depan langsung Shell untuk fungsi C API yang sesuai, mis. mkdir.

    Implementasi desktop utama Linux: GNU Coreutils untuk yang kecil, pisahkan GNU proyek untuk yang besar: sed, grep, awk, ... Beberapa utilitas CLI diimplementasikan oleh Bash sebagai bawaan .

  3. bahasa Shell

    E.g., a=b; echo "$a"

    Implementasi desktop utama Linux: GNU Bash .

  4. variabel Lingkungan

    E.g .: HOME, PATH.

    PATHsemantik pencarian ditentukan , termasuk bagaimana garis miring mencegah PATH pencarian .

  5. Status keluar program

    ANSI C mengatakan 0 Atau EXIT_SUCCESS Untuk sukses, EXIT_FAILURE Untuk kegagalan, dan membiarkan implementasi sisanya didefinisikan.

    POSIX menambahkan:

    • 126: Perintah ditemukan tetapi tidak dapat dieksekusi.

    • 127: Perintah tidak ditemukan.

    • > 128: Diakhiri oleh sinyal.

      Tetapi POSIX tampaknya tidak menentukan aturan 128 + SIGNAL_ID Yang digunakan oleh Bash: Kode keluar default saat proses dihentikan?

  6. Ekspresi reguler

    Ada dua jenis: BRE (Basic) dan ERE (Extended). Dasar sudah usang dan hanya disimpan agar tidak merusak API.

    Itu diimplementasikan oleh fungsi C API, dan digunakan di seluruh utilitas CLI, mis. grep menerima BRE secara default, dan ERE dengan -E.

    E.g .: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Implementasi Linux utama: glibc mengimplementasikan fungsi-fungsi di bawah regex.h program-program seperti grep dapat digunakan sebagai backend.

  7. Direktori struture

    E.g .: /dev/null, /tmp

    Linux FHS sangat memperluas POSIX.

  8. Nama file

    • / Adalah pemisah jalur
    • NUL tidak dapat digunakan
    • . Adalah cwd, .. Orang tua
    • nama file portabel
      • gunakan maksimal maksimal 14 karakter dan 256 untuk path lengkap
      • hanya dapat berisi: a-zA-Z0-9._-

    Lihat juga: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Konvensi API utilitas baris perintah

    Tidak wajib, digunakan oleh POSIX, tetapi hampir tidak ada di tempat lain, terutama di GNU. Namun benar, itu terlalu ketat, mis. hanya flag satu huruf (mis. -a), tidak ada versi panjang tanda hubung ganda (mis. --all).

    Beberapa konvensi yang banyak digunakan:

    • - Berarti stdin di mana file diharapkan
    • -- Mengakhiri bendera, mis. ls -- -l Untuk mendaftar direktori bernama -l

    Lihat juga: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "POSIX ACLs" (Daftar Kontrol Akses), mis. seperti yang digunakan sebagai backend untuk setfacl .

    Ini telah ditarik tetapi diterapkan di beberapa OS, termasuk di Linux dengan setxattr .

Siapa yang sesuai dengan POSIX?

Banyak sistem mengikuti POSIX dengan seksama, tetapi hanya sedikit yang benar-benar disertifikasi oleh Grup Terbuka yang mempertahankan standar. Yang tersertifikasi termasuk:

Kebanyakan distro Linux sangat patuh, tetapi tidak bersertifikat karena mereka tidak ingin membayar cek kepatuhan. Inspur's K-UX dan Huawei's EulerOS adalah dua contoh bersertifikat.

Daftar resmi sistem bersertifikat dapat ditemukan di: https://www.opengroup.org/openbrand/register/ dan juga di halaman wiki .

Windows

Windows menerapkan POSIX pada beberapa distribusi profesionalnya.

Karena ini adalah fitur opsional, pemrogram tidak dapat mengandalkannya untuk sebagian besar aplikasi pengguna akhir.

Dukungan sudah tidak digunakan lagi di Windows 8:

Pada 2016 API mirip Linux resmi baru bernama "Windows Subsystem untuk Linux" diumumkan. Ini termasuk panggilan sistem Linux, ELF berjalan, bagian dari sistem file /proc, Bash, GCC, (TODO kemungkinan glibc?), apt-get Dan lebih banyak lagi: https: // channel9. msdn.com/Events/Build/2016/P488 jadi saya percaya bahwa ini akan memungkinkan Windows untuk menjalankan banyak, jika tidak semua, POSIX. Namun, ini berfokus pada pengembang/penyebaran bukan pengguna akhir. Secara khusus, tidak ada rencana untuk mengizinkan akses ke GUI Windows.

Tinjauan historis kompatibilitas Microsoft POSIX resmi: http://brianreiter.org/2010/08/24/the-sad-history-of-the-Microsoft-posix-subsystem/

Cygwin adalah proyek pihak ketiga GPL yang terkenal untuk itu "menyediakan fungsionalitas POSIX API yang substansial" untuk Windows, tetapi mengharuskan Anda "membangun kembali aplikasi Anda dari sumber jika Anda ingin dijalankan pada Windows". MSYS2 adalah proyek terkait yang tampaknya menambahkan lebih banyak fungsi di atas Cygwin.

Android

Android memiliki perpustakaan C sendiri (Bionic) yang tidak sepenuhnya mendukung POSIX pada Android O: https://stackoverflow.com/questions/27604455/is-Android-posix -compatible

Tingkat bonus

The Linux Standard Base lebih lanjut memperluas POSIX.

Gunakan indeks non-frame, mereka jauh lebih mudah dibaca dan dicari: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Dapatkan versi penuh zip halaman HTML untuk memahami: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

POSIX adalah standar Sistem Operasi Portabel. Ini menjelaskan utilitas, API, dan layanan tertentu yang harus disediakan oleh sistem operasi yang sesuai untuk perangkat lunak (misalnya soket, file I/O dan threading) bersama dengan konvensi tentang bagaimana ini harus dipanggil dari suatu program.

Idenya adalah bahwa sebuah program yang ditulis untuk satu OS yang Memenuhi Syarat POSIX akan lebih mudah untuk port ke OS yang sesuai dengan POSIX daripada melakukan porting di antara OS yang tidak sesuai dengan POSIX. Inilah sebabnya mengapa lebih mudah untuk mem-port aplikasi dari, katakanlah, FreeBSD ke Linux daripada port dari FreeBSD ke Windows (meskipun Windows seolah-olah mendukung subset dari POSIX.)

16
Andrew Lambert

POSIX adalah subset dari UNIX yang dimaksudkan untuk mencakup berbagai lingkungan seperti Unix untuk sistem operasi lain; ini awalnya termasuk lingkungan seperti Eunice untuk VMS, kepribadian POSIX Windows NT, dan Apollo Domain/OS. Anda dapat menganggapnya sebagai API portabilitas standar untuk subset dari layanan sistem operasi yang perilakunya sama antara Unix dan non-Unix. Lihat http://standards.ieee.org/develop/wg/POSIX.html untuk informasi lebih lanjut.

14
geekosaur