it-swarm-vi.com

Chính xác thì POSIX là gì?

Tôi thấy POSIX được đề cập thường xuyên và ở mọi nơi và tôi đã cho rằng đó là tiêu chuẩn UNIX cơ bản .. cho đến khi tôi nhận thấy đoạn trích sau trên trang Wikipedia: Nhóm mở = =

Nhóm mở nổi tiếng nhất là tổ chức chứng nhận cho nhãn hiệu UNIX và xuất bản của nó Tiêu chuẩn kỹ thuật của Thông số kỹ thuật UNIX đơn, kéo dài các tiêu chuẩn POSIX và là định nghĩa chính thức của hệ thống UNIX.

Nếu định nghĩa chính thức của hệ thống UNIX là phần mở rộng của POSIX, thì chính xác POSIX là gì? , Nó dường như là một hòn đá tảng trong thế giới UNIX, nhưng tôi không biết làm thế nào nó phù hợp với bức tranh tổng thể.

144
Peter.O

POSIX đầu tiên là một tiêu chuẩn vào năm 1988 trước khi có Thông số kỹ thuật UNIX đơn. Đó là một trong những nỗ lực thống nhất tất cả các nhánh UNIX và các hệ thống giống như UNIX. POSIX là một Tiêu chuẩn của IEEE, nhưng vì IEEE không sở hữu nhãn hiệu UNIX®, nên tiêu chuẩn này không phải là UNIX® mặc dù nó dựa trên API UNIX hiện có tại thời điểm đó. POSIX.1 tiêu chuẩn đầu tiên được chính thức gọi là IEEE std 1003.1-1988. [ 1 ] IEEE đã tính một khoản phí đáng kể để có được bản sao của tiêu chuẩn.

Nhóm mở đã phát hành Thông số kỹ thuật UNIX đơn (SUSv2) vào năm 1997 dựa trên công việc của tiêu chuẩn POSIX của IEEE. SUSv3 được phát hành năm 2001 từ một nhóm làm việc chung giữa IEEE và Nhóm mở được gọi là Nhóm Austin. SUSv3 còn được gọi là POSIX: 2001 [ 2 ]. Hiện tại cũng có POSIX: 2004 và POSIX: 2008, đây là cốt lõi của SUSv4. Đối với UNIX® là gì, UNIX® là bất cứ thứ gì mà chủ sở hữu nhãn hiệu hiện tại đã đăng ký nói. Từ năm 1994, đó là Nhóm mở.

Novell mua lại doanh nghiệp hệ thống UNIX® từ AT & T/USL, nơi UNIX® ra đời. Năm 1994, họ đã bán quyền đối với nhãn hiệu UNIX® cho X/Open [] bây giờ được gọi là Nhóm mở. Sau đó, họ đã bán mã nguồn UNIX® cho SCO dưới dạng UNIXware®. [] Bản thân UNIX® đã rẽ nhánh nhiều lần [ 4 ] [ 5 ] một phần do mô hình cấp phép của AT & T. Mua UNIX® cung cấp cho bạn nguồn hoàn chỉnh của hệ điều hành và chuỗi công cụ đầy đủ để xây dựng nó. Mọi người có thể phân phối và sử dụng nguồn này. người sở hữu giấy phép cho UNIX® từ AT & T. Phí giấy phép là hàng ngàn.

BSD là một dự án tại Berkeley, đã bổ sung một số cải tiến cho hệ điều hành UNIX®. Mã BSD được phát hành theo giấy phép tự do hơn nhiều so với nguồn của AT & T và không yêu cầu phí giấy phép hoặc thậm chí yêu cầu được phân phối với nguồn, không giống như GPL mà GNU Project và Linux sử dụng. Điều này đã khiến một phần tốt của mã BSD được bao gồm trong các nhánh UNIX thương mại khác nhau. Vào khoảng 4.3BSD, họ gần như đã thay thế bất kỳ nhu cầu nào về mã nguồn AT & T UNIX® ban đầu. FreeBSD/NetBSD/OpenBSD đều là các nhánh của 4.3BSD đó là một hệ điều hành hoàn chỉnh và không có mã nguồn AT & T gốc. Họ cũng không có quyền đối với nhãn hiệu UNIX®, nhưng phần lớn mã của họ được sử dụng bởi các hệ điều hành UNIX thương mại. API được sử dụng trên UNIX được phát triển trên BSD và mã Unix Fast Filesystem đã được mượn và sử dụng trên các Hệ điều hành UNIX khác nhau như Solaris với các cải tiến riêng của chúng.

Linux được phát triển vào năm 1991, nhưng được phát triển từ đầu không giống như BSD và sử dụng Dự án GNU, một triển khai phòng sạch của phần lớn không gian người dùng UNIX. Nó triển khai phần lớn POSIX cho khả năng tương thích và giống như UNIX trong thiết kế, nhưng nó không có kết nối chặt chẽ với AT & T hoặc UNIX® mà BSD có.

130
penguin359

Điều quan trọng nhất POSIX 7 định nghĩa

  1. API C

    Tuyệt vời mở rộng ANSI C với những thứ như:

    • hoạt động thêm tệp: mkdir, dirname, symlink, readlink, link (liên kết cứng), poll() , stat, sync, nftw()
    • tiến trình và chủ đề: fork, execl, wait , pipe, semaphors sem_* , bộ nhớ dùng chung (shm_*), kill, lập lịch các tham số (Nice, sched_*), sleep, mkfifo, setpgid()
    • kết nối 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 Các cuộc gọi hệ thống Linux tồn tại để triển khai chức năng API POSIX C cụ thể và làm cho Linux tuân thủ, ví dụ: sys_write, sys_read, ... Tuy nhiên, nhiều tòa nhà trong số đó cũng có các tiện ích mở rộng dành riêng cho Linux.

    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.

  2. Tiện ích CLI

    Ví dụ: cd, ls, echo, ...

    Nhiều tiện ích là giao diện Shell trực tiếp cho chức năng API C tương ứng, ví dụ: mkdir.

    Triển khai máy tính để bàn Linux chính: GNU Coreutils cho các dự án nhỏ, riêng biệt GNU dự án cho các dự án lớn: sed, grep, awk, ... Một số tiện ích CLI được Bash triển khai dưới dạng tích hợp .

  3. Ngôn ngữ vỏ

    Ví dụ: a=b; echo "$a"

    Triển khai máy tính để bàn Linux chính: GNU Bash .

  4. Biến môi trường

    Ví dụ: HOME, PATH.

    PATHngữ nghĩa tìm kiếm được chỉ định , bao gồm cách dấu gạch chéo ngăn PATH search .

  5. 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 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 được tìm thấy nhưng không được thực thi.

    • 127: Không tìm thấy lệnh.

    • > 128: Bị chấm dứt bởi tín hiệu.

      Nhưng POSIX dường như không chỉ định quy tắc 128 + SIGNAL_ID Được Bash sử dụng: Mã thoát mặc định khi quá trình kết thúc?

  6. Biểu thức chính quy

    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 các hàm C API triển khai và được sử dụng trong các tiện ích CLI, ví dụ: 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 trong regex.h mà các chương trình như grep có thể sử dụng làm phụ trợ.

  7. Cấu trúc thư mục

    Ví dụ: /dev/null, /tmp

    Linux [~ # ~] fhs [~ # ~] mở rộng đáng kể POSIX.

  8. Tên tệp

    • / Là dấu phân cách đường dẫn
    • NUL không thể được sử dụng
    • .cwd, ..
    • tên tệp 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

  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ờ đơ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 tệp đượ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

  10. "POSIX ACL" (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 đã bị rút nhưng nó đã được triển khai trong một số HĐH, bao gồm trong Linux với setxattr .

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ủ. Inspur's K-UXEulerOS của Huawei là hai ví dụ được 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 .

Windows

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 hệ thống tập tin /proc, 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 là 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 "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- Tương thích với Android-posix

Mức thưởng

Cơ sở tiêu chuẩn Linux tiếp tục mở rộng 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-fifts/45832939 # 45832939

POSIX là tiêu chuẩn Hệ điều hành di động. Nó mô tả một số tiện ích, API và dịch vụ nhất định mà hệ điều hành tuân thủ phải cung cấp cho phần mềm (ví dụ: ổ cắm, tệp I/O và luồng) cùng với các quy ước về cách gọi chúng từ chương trình.

Ý tưởng là một chương trình được viết cho một HĐH tuân thủ POSIX sẽ dễ dàng chuyển sang một HĐH tuân thủ POSIX khác hơn là chuyển giữa các HĐH không tuân thủ POSIX. Đây là lý do tại sao việc chuyển một ứng dụng từ FreeBSD sang Linux dễ dàng hơn nhiều so với việc chuyển nó từ FreeBSD sang Windows (mặc dù Windows có thể hỗ trợ một tập hợp con POSIX.)

16
Andrew Lambert

POSIX là một tập hợp con của UNIX nhằm bao quát nhiều môi trường giống như Unix cho các hệ điều hành khác; điều này ban đầu bao gồm các môi trường như Eunice cho VMS, tính cách POSIX của Windows NT và Tên miền/HĐH Apollo. Bạn có thể nghĩ về nó như một API khả năng di động tiêu chuẩn cho tập hợp con của các dịch vụ hệ điều hành có hành vi giống nhau giữa Unix và không Unix. Xem http://stiterias.ieee.org/develop/wg/POSIX.html để biết thêm thông tin.

14
geekosaur