GNU/Linux >> Belajar Linux >  >> Linux

Apa yang dimaksud dengan POSIX?

POSIX adalah keluarga standar, ditentukan oleh IEEE, untuk mengklarifikasi dan menyeragamkan antarmuka pemrograman aplikasi (dan masalah tambahan, seperti utilitas shell baris perintah) yang disediakan oleh sistem operasi Unix-y. Ketika Anda menulis program Anda untuk bergantung pada standar POSIX, Anda dapat yakin untuk dapat mem-porting mereka dengan mudah di antara keluarga besar turunan Unix (termasuk Linux, tetapi tidak terbatas pada itu!); jika dan ketika Anda menggunakan beberapa API Linux yang tidak distandarisasi sebagai bagian dari Posix, Anda akan mengalami kesulitan jika dan ketika Anda ingin memindahkan program atau pustaka tersebut ke sistem Unix-y lainnya (mis., MacOSX) di masa mendatang.


Hal terpenting yang didefinisikan oleh POSIX 7

  1. API C

    Sangat memperluas ANSI C dengan hal-hal seperti:

    • operasi file lainnya:mkdir , dirname , symlink , readlink , link (tautan keras), 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()
    • utilitas:ekspresi reguler (reg* )

    API tersebut juga menentukan konsep sistem dasar yang menjadi sandarannya, mis. fork membutuhkan konsep proses.

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

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

  2. Utilitas CLI

    Misalnya:cd , ls , echo , ...

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

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

  3. Bahasa shell

    Misalnya, a=b; echo "$a"

    Implementasi desktop utama Linux:GNU Bash.

  4. Variabel lingkungan

    Misalnya:HOME , PATH .

    PATH semantik pencarian ditentukan, termasuk bagaimana garis miring mencegah PATH Cari.

  5. Status keluar program

    ANSI C mengatakan 0 atau EXIT_SUCCESS untuk sukses, EXIT_FAILURE untuk kegagalan, dan membiarkan implementasi lainnya ditentukan.

    POSIX menambahkan:

    • 126 :perintah ditemukan tetapi tidak dapat dieksekusi.

    • 127 :perintah tidak ditemukan.

    • > 128 :diakhiri oleh sinyal.

      Tapi POSIX sepertinya tidak menentukan 128 + SIGNAL_ID aturan yang digunakan oleh Bash:https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated

  6. Ekspresi reguler

    Ada dua jenis:BRE (Basic) dan ERE (Extended). Dasar tidak digunakan lagi 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 .

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

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

  7. Struktur direktori

    Misalnya:/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 14 karakter dan 256 untuk jalur lengkap
      • hanya dapat berisi:a-zA-Z0-9._-

    Lihat juga:apakah kepatuhan posix untuk sistem file?

  9. Konvensi API utilitas baris perintah

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

    Beberapa konvensi yang banyak digunakan:

    • - berarti stdin tempat file diharapkan
    • -- mengakhiri bendera, mis. ls -- -l untuk membuat daftar direktori bernama -l

    Lihat juga:Apakah ada standar untuk sakelar dan argumen baris perintah Linux?

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

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

Siapa yang mematuhi POSIX?

Banyak sistem mengikuti POSIX dengan cermat, tetapi hanya sedikit yang benar-benar disertifikasi oleh Open Group yang mempertahankan standar tersebut. Yang bersertifikat terkenal meliputi:

  • OS X (Apple) X singkatan dari 10 dan UNIX. Apakah sistem POSIX Apple pertama, dirilis sekitar tahun 2001. Lihat juga:Apakah OSX adalah OS POSIX?
  • AIX (IBM)
  • HP-UX (HP)
  • Solaris (Oracle)

Sebagian besar distro Linux sangat patuh, tetapi tidak tersertifikasi karena mereka tidak mau membayar cek kepatuhan. K-UX Inspur dan EulerOS Huawei adalah dua contoh tersertifikasi.

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

Jendela

Windows mengimplementasikan POSIX pada beberapa distribusi profesionalnya.

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

Dukungan tidak digunakan lagi di Windows 8:

  • Di manakah posisi implementasi 7 POSIX Microsoft Windows saat ini?
  • https://superuser.com/questions/495360/does-windows-8-still-implement-posix
  • Permintaan fitur:https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support

Pada tahun 2016, API mirip Linux resmi baru yang disebut "Subsistem Windows untuk Linux" diumumkan. Ini mencakup panggilan sistem Linux, menjalankan ELF, bagian dari /proc filesystem, Bash, GCC, (TODO kemungkinan glibc?), apt-get dan banyak lagi:https://channel9.msdn.com/Events/Build/2016/P488 jadi saya yakin ini akan memungkinkan Windows menjalankan banyak, jika tidak semua, POSIX. Namun, ini difokuskan pada pengembang/penyebaran, bukan pengguna akhir. Secara khusus, tidak ada rencana untuk mengizinkan akses ke Windows GUI.

Ikhtisar sejarah 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 karena "menyediakan fungsionalitas API POSIX yang substansial" untuk Windows, tetapi mengharuskan Anda "membangun ulang aplikasi Anda dari sumber jika Anda ingin menjalankannya di Windows". MSYS2 adalah proyek terkait yang tampaknya menambahkan lebih banyak fungsi di atas Cygwin.

Android

Android memiliki pustaka C sendiri (Bionic) yang tidak sepenuhnya mendukung POSIX pada Android O:Apakah Android kompatibel dengan POSIX?

Tingkat bonus

Basis Standar Linux lebih lanjut memperluas POSIX.

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

Dapatkan versi zip penuh dari halaman HTML untuk diambil:Di mana daftar fungsi API POSIX C?


POSIX adalah:

POSIX (diucapkan /ˈpɒzɪks/) atau "Antarmuka Sistem Operasi Portabel [untuk Unix]"1 adalah nama keluarga standar terkait yang ditentukan oleh IEEE untuk menentukan antarmuka pemrograman aplikasi (API), bersama dengan antarmuka shell dan utilitas untuk perangkat lunak yang kompatibel dengan varian Unix sistem operasi, meskipun standar dapat berlaku untuk sistem operasi apa pun.

Pada dasarnya itu adalah serangkaian tindakan untuk meringankan kesulitan pengembangan dan penggunaan rasa UNIX yang berbeda dengan memiliki (kebanyakan) API dan utilitas umum. Kepatuhan POSIX terbatas juga diperluas ke berbagai versi Windows.


Linux
  1. Apa yang setara dengan Posix popen() di Win32 API?

  2. Apa arti dari *nix?

  3. Apa arti dari fork() dan grep di Linux?

  1. Apa arti 'daftar hitam' di GStreamer?

  2. Apa arti dari `! -d` dalam perintah Bash ini?

  3. apa arti 1 di akhir skrip awk

  1. Linux vs. Unix:Apa bedanya?

  2. Apa arti curl -k -i -X ​​di Linux?

  3. Apa itu sistem file NSFS?