Hal terpenting yang didefinisikan POSIX 7
API C
Sangat memperluas ANSI C dengan hal-hal seperti:
- operasi file lebih:
mkdir
, dirname
, symlink
, readlink
, link
(hardlinks), poll()
, stat
, sync
,nftw()
- Proses dan benang:
fork
, execl
, wait
, pipe
, semaphors 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 yang mendasari di mana mereka bergantung, misalnya fork
membutuhkan konsep proses.
Banyak panggilan sistem Linux ada untuk melaksanakan fungsi API POSIX C tertentu dan membuat Linux compliant, misalnya sys_write
, sys_read
... Banyak dari mereka syscalls juga memiliki ekstensi Linux-spesifik namun.
Implementasi desktop utama Linux: glibc, yang dalam banyak kasus hanya menyediakan pembungkus dangkal untuk panggilan sistem.
Utilitas CLI
Misalnya: cd
, ls
, echo
, ...
Banyak utilitas adalah ujung depan shell langsung untuk fungsi API C yang sesuai, misalnya mkdir
.
Implementasi besar desktop Linux: GNU Coreutils untuk yang kecil, proyek GNU terpisah untuk orang-orang besar: sed
, grep
, awk
, ... Beberapa utilitas CLI dilaksanakan oleh Bash sebagai built-in .
Bahasa shell
Misalnya, a=b; echo "$a"
Implementasi desktop utama Linux: GNU Bash .
Variabel lingkungan
Misalnya: HOME
, PATH
.
PATH
semantik pencarian ditentukan , termasuk bagaimana garis miring mencegah PATH
pencarian .
Status keluar program
ANSI C mengatakan 0
atau EXIT_SUCCESS
untuk kesuksesan, 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.
Tapi POSIX tampaknya tidak menentukan 128 + SIGNAL_ID
aturan yang digunakan oleh Bash: Kode keluar default saat proses dihentikan?
Ekspresi reguler
Ada dua jenis: BRE (Dasar) dan ERE (Diperpanjang). 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
.
Misalnya: echo 'a.1' | grep -E 'a.[[:digit:]]'
Implementasi Linux utama: glibc mengimplementasikan fungsi-fungsi di bawah regex.h yang mana program suka grep
gunakan sebagai backend.
Struktur direktori
Misalnya: /dev/null
,/tmp
Linux FHS sangat memperluas POSIX.
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
Konvensi API utilitas baris perintah
Tidak wajib, digunakan oleh POSIX, tetapi hampir tidak ada di tempat lain, terutama di GNU. Tapi benar, itu terlalu ketat, misalnya hanya bendera huruf tunggal (mis. -a
), Tidak ada versi panjang tanda hubung ganda (mis --all
.).
Beberapa konvensi yang banyak digunakan:
-
berarti stdin tempat file diharapkan
--
mengakhiri flags, misalnya ls -- -l
untuk daftar direktori bernama-l
Lihat juga: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"POSIX ACLs" (Daftar Kontrol Akses), misalnya seperti yang digunakan sebagai backend untuk setfacl
.
Ini telah ditarik tetapi diimplementasikan di beberapa OS, termasuk di Linux dengan Linuxsetxattr
.
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. K-UX Inspur dan Huawei EulerOS adalah dua contoh yang disertifikasi.
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 tahun 2016, sebuah API mirip Linux resmi yang disebut "Windows Subsystem for Linux" diumumkan. Ini termasuk panggilan sistem Linux, ELF berjalan, bagian dari /proc
filesystem, Bash, GCC, (TODO kemungkinan glibc?), apt-get
Dan banyak lagi: https://channel9.msdn.com/Events/Build/2016/P488 jadi saya percaya itu akan memungkinkan Windows untuk menjalankan banyak, jika tidak semua, POSIX. Namun, ini difokuskan 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 terkenal untuk itu "menyediakan fungsionalitas POSIX API substansial" untuk Windows, tetapi mengharuskan Anda "membangun kembali aplikasi Anda dari sumber jika Anda ingin itu berjalan 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 dari halaman HTML untuk memahami: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939