POSIX 7'nin tanımladığı en önemli şeyler
C API
Büyük ölçüde ANSI C uzanır gibi şeylerle:
- daha fazla dosya işlemleri:
mkdir
, dirname
, symlink
, readlink
, link
(sabit bağlarının), poll()
, stat
, sync
,nftw()
- işlem ve iplik:
fork
, execl
, wait
, pipe
, semaphors sem_*
, paylaşılan hafıza ( shm_*
), kill
, zamanlama parametreleri ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
- ağ:
socket()
- bellek yönetimi:
mmap
, mlock
, mprotect
, madvise
,brk()
- yardımcı programlar: normal ifadeler (
reg*
)
Bu API'ler ayrıca dayandıkları temel sistem kavramlarını da belirler, örneğin fork
bir süreç kavramı gerektirir.
Birçok Linux sistem çağrıları örneğin belirli bir POSIX C API işlevi uygulamak ve Linux uyumlu hale getirmek için var sys_write
, sys_read
... o sistem çağrıları birçoğu da ancak Linux özgü uzantılara sahiptir.
Başlıca Linux masaüstü uygulaması: birçok durumda sadece sistem çağrılarına sığ bir sarmalayıcı sağlayan glibc.
CLI yardımcı programları
Örn: cd
, ls
, echo
, ...
Birçok yardımcı program, karşılık gelen bir C API işlevi için doğrudan kabuk ön uçlarıdır, örn mkdir
.
Başlıca Linux masaüstü uygulaması: küçük olanlar için GNU coreutils, büyük olanlar için ayrı GNU projeleri: sed
, grep
, awk
, ... Bazı CLI yardımcı programları Bash tarafından uygulanmaktadır yerleşik ins olarak .
Kabuk dili
Örneğin, a=b; echo "$a"
Binbaşı Linux masaüstü uygulaması: GNU Bash .
Ortam Değişkenleri
Örn .: HOME
, PATH
.
PATH
eğik çizgilerin PATH
aramayı nasıl önlediği de dahil olmak üzere, arama semantiği belirtilir .
Program çıkış durumu
ANSI C diyor ki 0
ya da EXIT_SUCCESS
başarı EXIT_FAILURE
için, başarısızlık ve geri kalan uygulamayı tanımlanmış olarak bırakır.
POSIX ekler:
126
: komut bulundu ancak çalıştırılabilir değil.
127
: komut bulunamadı.
> 128
: bir sinyal ile sonlandırıldı.
Ancak POSIX, 128 + SIGNAL_ID
Bash tarafından kullanılan kuralı belirtmiyor gibi görünüyor : İşlem sonlandırıldığında varsayılan çıkış kodu?
Düzenli ifade
İki tür vardır: BRE (Temel) ve ERE (Genişletilmiş). Temel kullanımdan kaldırılmıştır ve yalnızca API'leri bozmamak için saklanır.
Bunlar, C API işlevleri tarafından uygulanır ve CLI yardımcı programları boyunca kullanılır, örneğin grep
varsayılan olarak BRE'leri ve ERE'leri ile birlikte kabul eder -E
.
Örneğin: echo 'a.1' | grep -E 'a.[[:digit:]]'
Başlıca Linux uygulaması: glibc, regex.h altındaki işlevleri, hangi programların grep
arka uç olarak kullanabileceğini uygular .
Dizin dikmesi
Ör: /dev/null
,/tmp
Linux FHS, POSIX’i büyük ölçüde genişletmektedir.
Dosya adları
/
yol ayırıcı
NUL
kullanılamaz
.
olduğu cwd
, ..
ebeveyn
- taşınabilir dosya isimleri
- tam yol için en fazla 14 karakter ve 256
- sadece şunları içerebilir:
a-zA-Z0-9._-
Ayrıca bakınız: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
Komut satırı yardımcı programı API kuralları
Zorunlu değildir, POSIX tarafından kullanılır, ancak neredeyse hiçbir yerde, özellikle de GNU'da değil. Ancak doğrudur, çok kısıtlayıcıdır, örneğin sadece tek harf bayrakları (örneğin -a
), çift kısa çizgi uzun versiyonları (örneğin --all
) yoktur.
Yaygın olarak kullanılan birkaç sözleşme:
-
bir dosyanın beklendiği yerde stdin anlamına gelir
--
bayrakları sonlandırır, örneğin ls -- -l
bir dizini listelemek için-l
Ayrıca bakınız: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"POSIX ACL'ler" (Erişim Kontrol Listeleri), örneğin arka uç olarak kullanıldığı gibi setfacl
.
Bu geri çekildi ancak Linuxsetxattr
dahil birçok işletim sisteminde uygulandı .
POSIX'e kimler uygundur?
Pek çok sistem POSIX'i yakından takip ediyor, ancak birkaçı standardı koruyan Open Group tarafından onaylandı. Önemli sertifikalı olanlar şunlardır:
Çoğu Linux dağıtımı çok uyumludur, ancak onay çeki ödemek istemedikleri için sertifikalandırılmamıştır. Inspur'un K-UX'i ve Huawei'nin EulerOS'u iki sertifikalı örnek.
Sertifikalı sistemlerin resmi listesi: https://www.opengroup.org/openbrand/register/ ve ayrıca wiki sayfasında bulunabilir .
pencereler
Windows, POSIX'i bazı profesyonel dağıtımlarına uyguladı.
İsteğe bağlı bir özellik olduğundan, programcılar çoğu son kullanıcı uygulamasında buna güvenemediler.
Windows 8'de destek kullanımdan kaldırıldı:
2016 yılında "Linux için Windows Alt Sistemi" adlı yeni bir Linux benzeri API tanıtıldı. Linux sistem çağrıları, ELF çalışan, parçalarını içeren /proc
dosya sistemi Bash, GCC, (? YAPILACAK olasılıkla glibc), apt-get
ve daha fazlası: https://channel9.msdn.com/Events/Build/2016/P488 ben inanıyorum bu yüzden Windows'un POSIX'in tümü olmasa da çok çalışmasına izin verecektir. Bununla birlikte, son kullanıcılar yerine geliştiricilere / konuşlandırmaya odaklanmıştır. Özellikle, Windows GUI'ye erişime izin verecek plan yoktu.
Resmi Microsoft POSIX uyumluluğu ile ilgili genel bakış: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin , Windows için "önemli POSIX API işlevselliği sağlar" için iyi bilinen bir GPL üçüncü taraf projesidir, ancak "Windows'ta çalışmasını istiyorsanız uygulamanızı kaynaktan yeniden kurmanızı" gerektirir. MSYS2 , Cygwin'in üstüne daha fazla işlevsellik katan bir projedir.
Android
Android, Android O'dan itibaren POSIX'i tam olarak desteklemeyen kendi C kitaplığına (Bionic) sahiptir: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
Bonus seviyesi
Linux Standard Base ayrıca POSIX uzanır.
Kare olmayan dizinleri kullanın, çok daha okunaklı ve aranabilir: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Grepping için HTML sayfalarının tam sıkıştırılmış sürümünü edinin: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939