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()
- memproses 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 menerapkan tertentu POSIX C fungsi API 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
.
Mayor Linux pelaksanaan desktop yang: 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:
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
.
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: apa kepatuhan posix untuk sistem file?
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: Apakah ada standar untuk saklar dan argumen baris perintah Linux?
"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:
- OS X (Apple) X adalah singkatan dari 10 dan UNIX. Apakah sistem Apple POSIX pertama, dirilis sekitar tahun 2001. Lihat juga: Apakah OSX OS POSIX?
- AIX (IBM)
- HP-UX (HP)
- Solaris (Oracle)
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 2016 API mirip Linux resmi baru bernama "Windows Subsystem untuk 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 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 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: Apakah Android POSIX-kompatibel?
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 dipahami: Di manakah daftar fungsi API POSIX C?