Những điều quan trọng nhất POSIX 7 định nghĩa
API C
Mở rộng rất nhiều ANSI C với những thứ như:
- nhiều hoạt động tập tin:
mkdir
, dirname
, symlink
, readlink
, link
(liên kết cứng), poll()
, stat
, sync
,nftw()
- quy trình và chủ đề:
fork
, execl
, wait
, pipe
, semaphors sem_*
, bộ nhớ chia sẻ ( shm_*
), kill
, các thông số lập kế hoạch ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
- mạng:
socket()
- quản lý bộ nhớ:
mmap
, mlock
, mprotect
, madvise
,brk()
- tiện ích: biểu thức chính quy (
reg*
)
Các API đó cũng xác định các khái niệm hệ thống cơ bản mà chúng phụ thuộc vào, ví dụ: fork
yêu cầu khái niệm về một quy trình.
Nhiều hệ thống Linux cuộc gọi tồn tại để thực hiện một chức năng POSIX C API cụ thể và làm cho Linux phù hợp, ví dụ như sys_write
, sys_read
, ... Nhiều người trong số những syscalls cũng có phần mở rộng Linux cụ thể tuy nhiên.
Triển khai máy tính để bàn Linux chính: glibc, trong nhiều trường hợp chỉ cung cấp trình bao bọc nông cho các cuộc gọi hệ thống.
Tiện ích CLI
Ví dụ như: cd
, ls
, echo
, ...
Nhiều tiện ích này là phía trước vỏ trực tiếp kết thúc cho một hàm C API tương ứng, ví dụ mkdir
.
Major Linux thực hiện máy tính để bàn: GNU coreutils cho những cái nhỏ, các dự án GNU riêng biệt cho các công trình lớn: sed
, grep
, awk
, ... Một số tiện ích CLI được thực hiện bởi Bash như built-in .
Ngôn ngữ vỏ
Ví dụ, a=b; echo "$a"
Triển khai máy tính để bàn Linux chính: GNU Bash .
Biến môi trường
Ví dụ như: HOME
, PATH
.
PATH
ngữ nghĩa tìm kiếm được chỉ định , bao gồm cả cách gạch chéo ngăn PATH
tìm kiếm .
Trạng thái thoát chương trình
ANSI C nói 0
hoặc EXIT_SUCCESS
để thành công, EXIT_FAILURE
cho sự thất bại và để lại phần thực hiện còn lại được xác định.
POSIX cho biết thêm:
126
: lệnh tìm thấy nhưng không thể thực thi.
127
: lệnh không tìm thấy.
> 128
: chấm dứt bởi một tín hiệu.
Nhưng POSIX dường như không chỉ định 128 + SIGNAL_ID
quy tắc được sử dụng bởi Bash: Mã thoát mặc định khi quá trình kết thúc?
Biểu hiện thông thường
Có hai loại: BRE (Cơ bản) và ERE (Mở rộng). Basic không được dùng nữa và chỉ được giữ để không phá vỡ API.
Các hàm này được triển khai bởi các hàm C API và được sử dụng trong các tiện ích CLI, ví dụ như grep
chấp nhận BRE theo mặc định và ERE với -E
.
Ví dụ: echo 'a.1' | grep -E 'a.[[:digit:]]'
Triển khai Linux chính: glibc thực hiện các chức năng theo regex.h mà các chương trình như grep
có thể sử dụng làm phụ trợ.
Cấu trúc thư mục
Ví dụ như: /dev/null
,/tmp
Linux FHS mở rộng đáng kể POSIX.
Tên tập tin
/
là dải phân cách
NUL
không thể được sử dụng
.
là cwd
, ..
cha mẹ
- tên tập tin di động
- sử dụng tối đa 14 ký tự và 256 cho đường dẫn đầy đủ
- chỉ có thể chứa:
a-zA-Z0-9._-
Xem thêm: https://stackoverflow.com/questions/18550253/what-is-poseix-compliance-for-filesystem
Các quy ước API tiện ích dòng lệnh
Không bắt buộc, được sử dụng bởi POSIX, nhưng hầu như không ở đâu khác, đáng chú ý là không có trong GNU. Nhưng sự thật, nó quá hạn chế, ví dụ: chỉ các lá thư đơn (ví dụ -a
), không có phiên bản dài gạch nối kép (ví dụ --all
).
Một vài quy ước được sử dụng rộng rãi:
-
có nghĩa là stdin nơi một tập tin được mong đợi
--
chấm dứt cờ, ví dụ ls -- -l
để liệt kê một thư mục có tên-l
Xem thêm: https://stackoverflow.com/questions/8957222/are-there-stiterias-for-linux-command-line-switches-and-argument
"POSIX ACLs" (Danh sách điều khiển truy cập), ví dụ như được sử dụng làm phụ trợ cho setfacl
.
Điều này đã được rút nhưng nó đã được thực hiện trong một số HĐH, kể cả trong Linux vớisetxattr
.
Ai phù hợp với POSIX?
Nhiều hệ thống theo sát POSIX, nhưng một số ít thực sự được chứng nhận bởi Open Group duy trì tiêu chuẩn. Những người được chứng nhận đáng chú ý bao gồm:
Hầu hết các bản phân phối Linux đều rất tuân thủ, nhưng không được chứng nhận vì họ không muốn trả tiền kiểm tra tuân thủ. K-UX Inspur của và EulerOS của Huawei là hai ví dụ chứng nhận.
Danh sách chính thức của các hệ thống được chứng nhận được tìm thấy tại: https://www.opengroup.org/openbrand/register/ và cũng tại trang wiki .
các cửa sổ
Windows triển khai POSIX trên một số bản phân phối chuyên nghiệp.
Vì nó là một tính năng tùy chọn, các lập trình viên không thể dựa vào nó cho hầu hết các ứng dụng người dùng cuối.
Hỗ trợ không được dùng trong Windows 8:
Vào năm 2016, một API giống như Linux chính thức mới có tên là "Hệ thống con Windows cho Linux" đã được công bố. Nó bao gồm các cuộc gọi hệ thống Linux, ELF đang chạy, các bộ phận của /proc
hệ thống tệp, Bash, GCC, (TODO có thể là glibc?) apt-get
Và hơn thế nữa: https://channel9.msdn.com/Events/Build/2016/P488 vì vậy tôi tin rằng nó sẽ cho phép Windows chạy nhiều, nếu không phải tất cả, của POSIX. Tuy nhiên, nó tập trung vào các nhà phát triển / triển khai thay vì người dùng cuối. Cụ thể, không có kế hoạch cho phép truy cập vào GUI Windows.
Tổng quan lịch sử về khả năng tương thích chính thức của Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-poseix-subystem/
Cygwin là một dự án bên thứ ba GPL nổi tiếng với mục đích "cung cấp chức năng API POSIX đáng kể" cho Windows, nhưng yêu cầu bạn "xây dựng lại ứng dụng của mình từ nguồn nếu bạn muốn nó chạy trên Windows". MSYS2 là một dự án liên quan dường như bổ sung thêm nhiều chức năng trên đầu trang của Cygwin.
Android
Android có thư viện C (Bionic) riêng không hỗ trợ đầy đủ POSIX kể từ Android O: https://stackoverflow.com/questions/27604455/is-android-poseix-comp Tương thích
Mức thưởng
Các Linux Standard Base mở rộng hơn nữa POSIX.
Sử dụng các chỉ mục không có khung, chúng dễ đọc và dễ tìm kiếm hơn nhiều: http://pub.opengroup.org/onlinepub/9699919799/nfindex.html
Nhận phiên bản nén đầy đủ của các trang HTML để grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-poseix-api-fiances/45832939#45832939