POSIX là gì? Tôi đã đọc bài viết Wikipedia và tôi đọc nó mỗi khi tôi gặp thuật ngữ này. Thực tế là tôi không bao giờ thực sự hiểu nó là gì.
Ai đó có thể vui lòng giải thích cho tôi bằng cách giải thích "sự cần thiết của POSIX" không?
POSIX là gì? Tôi đã đọc bài viết Wikipedia và tôi đọc nó mỗi khi tôi gặp thuật ngữ này. Thực tế là tôi không bao giờ thực sự hiểu nó là gì.
Ai đó có thể vui lòng giải thích cho tôi bằng cách giải thích "sự cần thiết của POSIX" không?
Câu trả lời:
POSIX là một nhóm các tiêu chuẩn, được chỉ định bởi IEEE , để làm rõ và thống nhất các giao diện lập trình ứng dụng (và các vấn đề phụ trợ, như các tiện ích vỏ dòng lệnh) được cung cấp bởi các hệ điều hành Unix-y. Khi bạn viết các chương trình của mình dựa trên các tiêu chuẩn POSIX, bạn có thể khá chắc chắn rằng có thể chuyển chúng dễ dàng giữa một nhóm lớn các dẫn xuất Unix (bao gồm cả Linux, nhưng không giới hạn ở nó!); nếu và khi bạn sử dụng một số API Linux không được chuẩn hóa như một phần của Posix, bạn sẽ gặp khó khăn hơn nếu và khi bạn muốn chuyển chương trình hoặc thư viện đó sang các hệ thống Unix-y khác (ví dụ: MacOSX) trong tương lai.
Microsoft's market share on desktops, at least, makes it "what the world follows"
- Thật thú vị khi lưu ý có bao nhiêu thứ đã thay đổi kể từ nhận xét này từ năm 2009 :)
Những điều quan trọng nhất POSIX 7 định nghĩa
Mở rộng rất nhiều ANSI C với những thứ như:
mkdir
, dirname
, symlink
, readlink
, link
(liên kết cứng), poll()
, stat
, sync
,nftw()
fork
, execl
, wait
, pipe
, semaphors sem_*
, chia sẻ bộ nhớ ( shm_*
), kill
, các thông số lập kế hoạch ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
socket()
mmap
, mlock
, mprotect
, madvise
,brk()
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 cụ thể POSIX C API 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.
Ví dụ như: cd
, ls
, echo
, ...
Nhiều tiện ích này là trực tiếp vỏ kết thúc trướ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 .
Ví dụ, a=b; echo "$a"
Triển khai máy tính để bàn Linux chính: GNU Bash .
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 .
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 Bash sử dụng: /unix/99112/default-exit-code-when- Process-is-termated
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ợ.
Ví dụ như: /dev/null
,/tmp
Linux FHS mở rộng đáng kể POSIX.
/
là dải phân cáchNUL
không thể được sử dụng.
là cwd
, ..
cha mẹa-zA-Z0-9._-
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: Có các tiêu chuẩn cho các đối số và chuyển đổi dòng lệnh Linux không?
"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 Microsoft POSIX chính thức: 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 như Android O: Android có tương thích POSIX không?
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: Danh sách các hàm POSIX C API nằm ở đâu?
POSIX là:
POSIX (phát âm / pɒzɪks /) hoặc "Giao diện hệ điều hành di động [cho Unix]" 1 là tên của một nhóm các tiêu chuẩn liên quan được chỉ định bởi IEEE để xác định giao diện lập trình ứng dụng (API), cùng với giao diện vỏ và tiện ích cho phần mềm tương thích với các biến thể của hệ điều hành Unix, mặc dù tiêu chuẩn có thể áp dụng cho bất kỳ hệ điều hành nào.
Về cơ bản, đây là một bộ các biện pháp để giảm bớt nỗi đau của sự phát triển và sử dụng các hương vị khác nhau của UNIX bằng cách có một API (hầu hết) chung và các tiện ích. Tuân thủ POSIX hạn chế cũng mở rộng cho các phiên bản Windows khác nhau.
Hãy để tôi đưa ra lời giải thích "không chính thức".
POSIX là một bộ các tiêu chuẩn cố gắng phân biệt các hệ thống "UNIX" và UNIX giống với các hệ thống không tương thích với chúng. Nó được tạo ra bởi chính phủ Hoa Kỳ cho mục đích mua sắm. Ý tưởng là các mua sắm liên bang Hoa Kỳ cần một cách để xác định hợp pháp các yêu cầu đối với các loại giá thầu và hợp đồng khác nhau theo cách có thể được sử dụng để loại trừ các hệ thống mà một cơ sở mã hoặc nhân viên lập trình hiện tại sẽ KHÔNG thể mang theo được.
Vì POSIX đã được viết trên thực tế ... để mô tả một tập hợp các hệ thống cạnh tranh tương tự lỏng lẻo ... nó KHÔNG được viết theo cách có thể được thực hiện.
Vì vậy, ví dụ, NT của Microsoft được viết với đủ sự phù hợp POSIX để đủ điều kiện cho một số giá thầu ... mặc dù hệ thống con POSIX về cơ bản là vô dụng về tính di động thực tế và khả năng tương thích với các hệ thống UNIX.
Nhiều tiêu chuẩn khác cho UNIX đã được viết trong nhiều thập kỷ. Những thứ như Spec1170 (được chỉ định mười một trăm bảy mươi lệnh gọi hàm phải được triển khai tương thích) và các hóa thân khác nhau của SUS (Đặc tả UNIX đơn).
Đối với hầu hết các "tiêu chuẩn" này không phù hợp với bất kỳ ứng dụng kỹ thuật thực tế nào. Chúng tồn tại nhiều nhất cho tranh luận, tranh luận pháp lý và các lý do rối loạn chức năng khác.
POSIX là một tiêu chuẩn cho các hệ điều hành được cho là giúp viết phần mềm đa nền tảng dễ dàng hơn. Đây là một vấn đề đặc biệt lớn trong thế giới Unix.
POSIX là một bộ các tiêu chuẩn được đưa ra bởi IEEE và Nhóm mở mô tả cách một Unix lý tưởng sẽ hoạt động. Các lập trình viên, người dùng và quản trị viên đều có thể làm quen với tài liệu POSIX và mong đợi một Unix-khiếu nại POSIX sẽ cung cấp tất cả các phương tiện tiêu chuẩn được đề cập.
Vì mọi Unix đều làm mọi thứ hơi khác một chút - Solaris, Mac OS X, IRIX, BSD và Linux đều có những điểm kỳ quặc - POSIX đặc biệt hữu ích với những người trong ngành vì nó xác định môi trường tiêu chuẩn để hoạt động. Ví dụ: hầu hết các chức năng trong thư viện C đều dựa trên POSIX; do đó, một lập trình viên có thể sử dụng một ứng dụng trong ứng dụng của mình và hy vọng nó sẽ hoạt động giống nhau trên hầu hết các Unices.
Tuy nhiên, các khu vực khác nhau của Unix thường là trọng tâm, thay vì các khu vực tiêu chuẩn.
Điều tuyệt vời về POSIX là bạn có thể tự mình đọc nó:
Vấn đề 7 được gọi là POSIX.1-2008 và có những điều mới trong đó - tuy nhiên, Google-fu cho POSIX.1 và như vậy sẽ cho phép bạn xem toàn bộ lịch sử đằng sau Unix là gì.
Năm 1985, các cá nhân từ các công ty trong ngành công nghiệp máy tính đã cùng nhau phát triển tiêu chuẩn POSIX (Giao diện hệ điều hành di động cho môi trường máy tính), chủ yếu dựa trên Định nghĩa giao diện UNIX System V (SVID) và các nỗ lực tiêu chuẩn hóa trước đó. Những nỗ lực này được thúc đẩy bởi chính phủ Hoa Kỳ, nơi cần một môi trường điện toán tiêu chuẩn để giảm thiểu chi phí đào tạo và mua sắm. Được phát hành vào năm 1988, POSIX là một nhóm các tiêu chuẩn của IEEE xác định các giao diện API, shell và tiện ích cho một hệ điều hành. Mặc dù nhắm vào các hệ thống giống như UNIX, các tiêu chuẩn có thể áp dụng cho bất kỳ hệ điều hành tương thích nào. Giờ đây, khi các tiêu chuẩn này đã được chấp nhận, các nhà phát triển phần mềm có thể phát triển các ứng dụng chạy trên tất cả các phiên bản tuân thủ của UNIX, Linux,
Từ cuốn sách: Hướng dẫn thực hành về Linux
Posix giống như một hệ điều hành, nó là một "tiêu chuẩn hệ điều hành". Bạn có thể tưởng tượng nó như một hệ điều hành tưởng tượng, thực sự không tồn tại, nhưng nó có một tài liệu. Các giấy tờ này là "tiêu chuẩn posix", được định nghĩa bởi IEEE, là tổ chức tiêu chuẩn lớn của Hoa Kỳ. Các hệ điều hành triển khai đặc tả này là "Tương thích Posix".
Các quy định của chính phủ thích các giải pháp tuân thủ Posix trong các khoản đầu tư của họ, do đó, tuân thủ Posix có lợi thế tài chính đáng kể, đặc biệt đối với các công ty CNTT lớn của Hoa Kỳ.
Phần thưởng cho một hệ điều hành tuân thủ hoàn toàn posix, đó là một đảm bảo rằng nó sẽ biên dịch và chạy tất cả các ứng dụng tuân thủ Posix một cách liền mạch.
Linux là một trong những nổi tiếng nhất. OSX, Solaris, NetBSD và Windows NT cũng chơi ở đây. Free- và OpenBSD chỉ "gần như" tuân thủ Posix. Sự tuân thủ theo nguyên tắc của WinNT chỉ là một giải pháp giả để tránh quy định này của chính phủ ở trên.
Tiêu chuẩn này cung cấp một cơ sở chung cho các hệ điều hành giống Unix. Nó chỉ định cách shell nên hoạt động, những gì mong đợi từ các lệnh như ls và grep và một số thư viện C mà các tác giả C có thể mong đợi có sẵn.
Ví dụ: các đường ống mà người dùng dòng lệnh sử dụng để xâu chuỗi các lệnh lại với nhau được chỉ định chi tiết ở đây, có nghĩa là chức năng popen (mở ống) của C là tiêu chuẩn POSIX, không phải tiêu chuẩn ISO C.
POSIX là viết tắt của Giao diện hệ điều hành di động và là một tiêu chuẩn của IEEE được thiết kế để hỗ trợ tính di động của ứng dụng. POSIX là một nỗ lực của một nhóm các nhà cung cấp để tạo ra một phiên bản tiêu chuẩn duy nhất của UNIX.
POSIX định nghĩa bộ tiêu chuẩn cho hệ điều hành hoặc chương trình. Mục tiêu là viết phần mềm mới tương thích với các hệ thống giống như UNIX.
Ví dụ, một chương trình chạy trên Linux cũng có thể được biên dịch và chạy trên các hệ thống tương tự UNIX khác như Solaris, HP-UX và AIX, v.v.
Các ví dụ phổ biến nhất GNU Bash
là 100% tuân thủ POSIX và gawk
tiện ích.
Posix chi phối khả năng tương tác, tính di động và trong các lĩnh vực khác như việc sử dụng và cơ chế của fork, quyền và các tiêu chuẩn hệ thống tệp như / etc, / var, / usr, v.v. . Do đó, khi các nhà phát triển viết chương trình theo hệ thống tương thích Posix, chẳng hạn như Linux, thông thường, không phải lúc nào cũng được bảo đảm để chạy trên một hệ thống tuân thủ posix khác như hệ thống AIX của IBM hoặc các biến thể thương mại khác của Unix. Posix là một điều tốt để có vì nó giúp giảm bớt sự phát triển phần mềm cho tính di động tối đa mà nó phấn đấu. Hy vọng câu trả lời này có ý nghĩa.
Cảm ơn Jed Smith & Tinkertim đã chỉ ra lỗi của tôi - xấu của tôi !!! :
Một đặc tả (bản thiết kế) về cách làm cho một hệ điều hành tương thích với hệ điều hành UNIX muộn (xin Chúa ban phước cho anh ấy!). Đây là lý do tại sao macOS và GNU / Linux có các dòng lệnh đầu cuối, GUI, thư viện, v.v ... bởi vì cả hai đều được thiết kế theo kế hoạch chi tiết POSIX.
POSIX không cho các kỹ sư và lập trình viên biết cách viết mã mà phải viết mã gì.
Một số sự thật về POSIX không quá sáng sủa.
POSIX cũng là giao diện gọi hệ thống hoặc API và đã gần 30 năm tuổi.
Nó được thiết kế để truy cập dữ liệu tuần tự vào bộ nhớ cục bộ , sử dụng các máy tính đơn lẻ với CPU đơn.
Bảo mật không phải là mối quan tâm lớn trong POSIX theo thiết kế, dẫn đến nhiều cuộc tấn công tình trạng chủng tộc trong nhiều năm và buộc các lập trình viên phải khắc phục những hạn chế này.
Các lỗi nghiêm trọng vẫn đang được phát hiện, các lỗi có thể đã được khắc phục bằng thiết kế API POSIX an toàn hơn.
POSIX hy vọng người dùng sẽ phát hành một cuộc gọi đồng bộ tại một thời điểm và chờ kết quả trước khi thực hiện cuộc gọi tiếp theo. Các lập trình viên ngày nay hy vọng sẽ đưa ra nhiều yêu cầu không đồng bộ tại một thời điểm để cải thiện thông lượng tổng thể.
API đồng bộ này đặc biệt xấu khi truy cập các đối tượng từ xa và đám mây, nơi có độ trễ cao.