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 forkbir 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 PATHaramayı nasıl önlediği de dahil olmak üzere, arama semantiği belirtilir .
Program çıkış durumu
ANSI C diyor ki 0ya da EXIT_SUCCESSbaşarı EXIT_FAILUREiç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_IDBash 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 grepvarsayı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 greparka 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 -- -lbir 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 /procdosya sistemi Bash, GCC, (? YAPILACAK olasılıkla glibc), apt-getve 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