POSIX คืออะไร


139

ฉันเห็น POSIX พูดถึงบ่อยครั้งและทุกที่และฉันคิดว่ามันเป็นมาตรฐานของระบบปฏิบัติการยูนิกซ์พื้นฐาน .. จนกระทั่งฉันสังเกตเห็นข้อความที่ตัดตอนมาต่อไปนี้บนหน้า Wikipedia: The Open Group

เปิด Group มีชื่อเสียงมากที่สุดในขณะที่ร่างกายได้รับการรับรองสำหรับเครื่องหมายการค้า UNIX และสิ่งพิมพ์ของมาตรฐานทางเทคนิคสเปก Unix เดี่ยว , ซึ่งทอดตัวมาตรฐาน POSIX และเป็นความหมายอย่างเป็นทางการของระบบยูนิกซ์

หากคำจำกัดความอย่างเป็นทางการของระบบ UNIX เป็นส่วนเสริมของ POSIX แล้ว POSIX คืออะไร ,,, ดูเหมือนว่ามันจะเป็นมาตรฐานของโลกยูนิกซ์ แต่ฉันไม่รู้ว่ามันเข้ากับภาพรวมได้อย่างไร


2
SUS เป็นคำนิยามอย่างเป็นทางการของ UNIX ตั้งแต่ The Open Group ไม่ใช่ IEEE เป็นเจ้าของเครื่องหมายการค้า UNIX ดูคำตอบของฉันด้านล่าง
penguin359


คำตอบ:


125

POSIX แรกเป็นมาตรฐานในปี 1988 นานก่อนที่สเปค UNIX เดียว มันเป็นหนึ่งในความพยายามในการรวมระบบ UNIX forks และระบบที่เหมือน UNIX เข้าด้วยกัน POSIX เป็นมาตรฐาน IEEE แต่เนื่องจาก IEEE ไม่ได้เป็นเจ้าของเครื่องหมายการค้าUNIX®มาตรฐานไม่ใช่UNIX®แม้ว่าจะเป็นไปตาม UNIX API ที่มีอยู่ในเวลานั้น POSIX.1 มาตรฐานแรกนั้นเป็นที่รู้จักอย่างเป็นทางการว่า IEEE std 1003.1-1988 [ 1 ] IEEE เรียกเก็บค่าธรรมเนียมจำนวนมากเพื่อรับสำเนามาตรฐาน

Open Group เผยแพร่ Single UNIX Specification (SUSv2) ในปี 1997 ตามการทำงานของ IEEE ของมาตรฐาน POSIX SUSv3 เปิดตัวในปี 2544 จากคณะทำงานร่วมระหว่าง IEEE และ The Open Group ซึ่งรู้จักกันในนาม Austin Group SUSv3 ยังเป็นที่รู้จักกันในนาม POSIX: 2001 [ 2 ] ขณะนี้ยังมี POSIX: 2004 และ POSIX: 2008 ซึ่งเป็นแกนหลักของ SUSv4 สำหรับUNIX®คืออะไรUNIX®คือสิ่งที่เจ้าของเครื่องหมายการค้าจดทะเบียนในปัจจุบันระบุว่าเป็น ตั้งแต่ปี 1994 นั่นคือกลุ่ม Open

Novell เข้าซื้อธุรกิจระบบUNIX®จาก AT & T / USL ซึ่งเป็นที่ที่UNIX®ถือกำเนิดขึ้น ในปี 1994 พวกเขาขายสิทธิ์ในเครื่องหมายการค้าUNIX®ให้กับ X / Open [ 3 ] ซึ่งปัจจุบันรู้จักกันในชื่อว่า The Open Group จากนั้นพวกเขาก็ขายซอร์สโค้ดUNIX®ให้แก่ SCO ในฐานะUNIXWARE® [ 3 ] UNIX®นั้นมีหลายครั้ง [ 4 ] [ 5 ] ส่วนหนึ่งเป็นเพราะรูปแบบการออกใบอนุญาตของ AT&T การจัดซื้อUNIX®ให้แหล่งที่มาที่สมบูรณ์ของระบบปฏิบัติการและเครื่องมือแบบเต็มรูปแบบเพื่อสร้างมัน การแก้ไขแหล่งที่มาสามารถแจกจ่ายและใช้โดยทุกคนที่เป็นเจ้าของสิทธิ์การใช้งานเพื่อUNIX®จาก AT&T ค่าธรรมเนียมใบอนุญาตเป็นพัน

BSD เป็นโครงการที่ Berkeley ซึ่งเพิ่มการปรับปรุงจำนวนมากให้กับระบบปฏิบัติการUNIX® รหัส BSD ได้รับการเผยแพร่ภายใต้ใบอนุญาตเสรีมากกว่าแหล่งของ AT&T และไม่ต้องการค่าธรรมเนียมใบอนุญาตหรือแม้แต่ความต้องการที่จะแจกจ่ายกับแหล่งที่มาซึ่งแตกต่างจาก GPL ที่โครงการ GNU และ Linux ใช้ นี่เป็นสาเหตุที่ทำให้ส่วนหนึ่งของรหัส BSD นั้นรวมอยู่กับส้อม UNIX เชิงพาณิชย์หลายประเภท ประมาณ 4.3BSD พวกเขาเกือบจะแทนที่ความต้องการ AT&T UNIX®ต้นฉบับทุกตัว FreeBSD / NetBSD / OpenBSD เป็นส้อมทั้งหมดของ 4.3BSD ที่เป็นระบบปฏิบัติการที่สมบูรณ์และไม่มีรหัสต้นฉบับ AT&T ต้นฉบับ พวกเขาไม่มีสิทธิ์เครื่องหมายการค้า UNIX แต่ส่วนใหญ่ของรหัสเหล่านี้ถูกใช้โดยระบบปฏิบัติการ UNIX เชิงพาณิชย์

Linux ได้รับการพัฒนาในปีพ. ศ. 2534 แต่ได้รับการพัฒนาตั้งแต่เริ่มต้นซึ่งแตกต่างจาก BSD และใช้โครงการ GNU ที่มีอยู่เดิมซึ่งเป็นการใช้งานแบบคลีนรูมของพื้นที่ผู้ใช้ UNIX จำนวนมาก มันใช้ POSIX จำนวนมากเพื่อความเข้ากันได้และมีลักษณะคล้าย UNIX ในการออกแบบ แต่ไม่มีการเชื่อมต่ออย่างใกล้ชิดกับ AT&T หรือUNIX®ที่ BSD มี


1
คำตอบที่ยอดเยี่ยม .. คำตอบทั้งหมด (3) ตอบได้ดี แต่คำตอบนี้ให้ข้อมูลอย่างมหาศาล สิ่งที่ฉันต้องการ ... และขอบคุณสำหรับความคิดเห็น (ด้านล่างเนื้อความคำถาม) เกี่ยวกับ SUS ฉันเข้าใจดีพอตอนนี้ขอบคุณ ... (และฉันไม่ได้สังเกตว่ามันเป็นเพียงย่อหน้าเดียว ... มันเกินไป น่าสนใจ :)
Peter.O

2
@Mikel หวังว่าการแก้ไขของฉันจะช่วยได้นิดหน่อย
penguin359

1
นั่นเป็นคำตอบที่ยอดเยี่ยมที่นั่น @ penguin359!
boehj

ใครบ้างมีความคิดที่ดีเกี่ยวกับสิ่งที่ X หมายถึง? หากเป็นเพียงคำต่อท้ายเพื่อระบุความสัมพันธ์กับ Unix มันควรเป็นตัวพิมพ์เล็กหรือไม่
Alex W

ยอดเยี่ยม ขอขอบคุณ. ฉันได้รับการคำนวณสำหรับประวัติศาสตร์ที่มาก แต่รายละเอียด "นินทา" ของสิ่งที่เกิดขึ้นไม่ใช่สิ่งที่ฉันมุ่งเน้น ดีที่จะเห็นเส้นทาง
Ken Ingram

55

สิ่งที่สำคัญที่สุดPOSIX 7กำหนด

  1. C API

    ขยาย ANSI Cอย่างมากด้วยสิ่งต่าง ๆ เช่น:

    • แฟ้มการดำเนินงานเพิ่มเติมได้ที่: mkdir, dirname, symlink, readlink, link(hardlinks) poll(), stat, sync,nftw()
    • กระบวนการและหัวข้อ: fork, execl, wait, pipe, semaphors sem_*หน่วยความจำที่ใช้ร่วมกัน ( shm_*) killพารามิเตอร์การตั้งเวลา ( nice, sched_*) sleep, mkfifo,setpgid()
    • เครือข่าย: socket()
    • จัดการหน่วยความจำ: mmap, mlock, mprotect, madvise,brk()
    • โปรแกรมอรรถประโยชน์: นิพจน์ทั่วไป ( reg*)

    API เหล่านั้นยังกำหนดแนวคิดระบบพื้นฐานที่ต้องพึ่งพาเช่นforkต้องการแนวคิดของกระบวนการ

    หลายลินุกซ์สายระบบที่มีอยู่เพื่อใช้ฟังก์ชัน API POSIX C ที่เฉพาะเจาะจงและทำให้ลินุกซ์ที่สอดคล้องเช่นsys_write, sys_read... หลาย syscalls เหล่านั้นยังมีส่วนขยายของลินุกซ์เฉพาะ แต่

    การติดตั้งบนเดสก์ท็อปหลักของ Linux: glibc ซึ่งในหลาย ๆ กรณีจะมีตัวห่อหุ้มตื้น ๆ สำหรับการเรียกระบบ

  2. ยูทิลิตี้ CLI

    ตัวอย่าง: cd, ls, echo...

    สาธารณูปโภคหลายอย่างที่ด้านหน้าเปลือกโดยตรงสิ้นสุดลงสอดคล้องฟังก์ชัน API C mkdirเช่น

    ที่สำคัญการดำเนินงานลินุกซ์สก์ท็อป: GNU coreutils สำหรับคนที่มีขนาดเล็กโครงการ GNU แยกต่างหากสำหรับคนใหญ่: sed, grep, awk... บางสาธารณูปโภค CLI จะดำเนินการโดยทุบตีเป็นตัว -ins

  3. ภาษาของเชลล์

    เช่น, a=b; echo "$a"

    ที่สำคัญการใช้งานลินุกซ์: GNU ทุบตี

  4. ตัวแปรสภาพแวดล้อม

    HOMEเช่น PATH,

    PATH ความหมายการค้นหาที่ระบุไว้รวมทั้งวิธีการป้องกันไม่ให้ทับPATHค้นหา

  5. สถานะการออกจากโปรแกรม

    ANSI C พูด0หรือEXIT_SUCCESSเพื่อความสำเร็จEXIT_FAILUREสำหรับความล้มเหลวและออกจากการใช้งานที่เหลือ

    POSIX เพิ่ม:

  6. การแสดงออกปกติ

    มีสองประเภทคือ BRE (พื้นฐาน) และ ERE (ขยาย) พื้นฐานเลิกใช้แล้วและเก็บไว้เพื่อไม่ให้แตก API เท่านั้น

    เหล่านั้นจะถูกนำมาใช้โดยฟังก์ชัน C API และใช้ตลอดทั้งสาธารณูปโภค CLI เช่นgrepยอมรับ Bres โดยค่าเริ่มต้นและ Eres -Eกับ

    เช่น: echo 'a.1' | grep -E 'a.[[:digit:]]'

    การใช้งาน Linux ที่สำคัญ: glibc ใช้ฟังก์ชั่นภายใต้regex.hซึ่งโปรแกรมเช่นgrepสามารถใช้เป็นแบ็กเอนด์

  7. ไดเรกทอรี struture

    เช่น/dev/null,/tmp

    Linux FHSขยาย POSIX อย่างมาก

  8. ชื่อไฟล์

    • / เป็นตัวแยกเส้นทาง
    • NUL ไม่สามารถใช้
    • .เป็นcwd, ..ผู้ปกครอง
    • ชื่อไฟล์แบบพกพา
      • ใช้อย่างมากที่สุด 14 ตัวอักษรและ 256 ตัวอักษรสำหรับเส้นทางแบบเต็ม
      • มีได้เพียง: a-zA-Z0-9._-

    ดูเพิ่มเติมที่: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. ข้อตกลง API ยูทิลิตี้บรรทัดคำสั่ง

    ไม่ใช่ข้อบังคับที่ใช้โดย POSIX แต่แทบจะไม่มีที่อื่นเลยโดยเฉพาะใน GNU แต่จริงมันมีข้อ จำกัด เกินไปเช่นเดียวกับตัวอักษรธงเท่านั้น (เช่น-a) ไม่มีรุ่นที่ใช้ยัติภังค์ยาวสองเท่า (เช่น--all)

    อนุสัญญาที่ใช้กันอย่างแพร่หลายไม่กี่:

    • - หมายถึง stdin ที่คาดว่าไฟล์
    • --ยุติการตั้งค่าสถานะเช่นls -- -lเพื่อแสดงรายการไดเรกทอรีที่มีชื่อ-l

    ดูเพิ่มเติมที่: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "POSIX ACLs" (การควบคุมการเข้าถึงรายการ) setfaclเช่นที่ใช้เป็นแบ็กเอนด์สำหรับ

    นี้ถูกถอนออกแต่มันก็ถูกนำมาใช้ในหลายระบบปฏิบัติการรวมทั้งในลินุกซ์ด้วยsetxattr

เป็นไปตาม POSIX ใคร

ระบบจำนวนมากติดตาม POSIX อย่างใกล้ชิด แต่มีน้อยคนที่ได้รับการรับรองโดย Open Group ที่รักษามาตรฐาน คนที่ได้รับการรับรองที่โดดเด่นรวมถึง:

  • OS X (Apple) X หมายถึงทั้ง 10 และ UNIX เป็นระบบ POSIX ของ Apple ระบบแรกเปิดตัวในปี 2001 ดูเพิ่มเติมที่: https://stackoverflow.com/questions/5785516/is-osx-a-posix-os
  • AIX (IBM)
  • HP-UX (HP)
  • โซลาริส (Oracle)

Linux distros ส่วนใหญ่นั้นเข้ากันได้ดี แต่ไม่ผ่านการรับรองเพราะพวกเขาไม่ต้องการจ่ายการตรวจสอบการปฏิบัติตามกฎระเบียบ Inspur ของ K-UXและหัวเว่ย EulerOSเป็นสองตัวอย่างที่ผ่านการรับรอง

รายการอย่างเป็นทางการของระบบได้รับการรับรองพบได้ที่: https://www.opengroup.org/openbrand/register/และที่หน้าวิกิพีเดีย

ของ windows

Windows ใช้ POSIX กับการกระจายระดับมืออาชีพ

เนื่องจากมันเป็นคุณสมบัติเสริมโปรแกรมเมอร์จึงไม่สามารถใช้กับแอพพลิเคชั่นของผู้ใช้ส่วนใหญ่ได้

การสนับสนุนถูกเลิกใช้ใน Windows 8:

ในปี 2559 มีการประกาศ API คล้าย Linux ตัวใหม่ชื่อว่า "Windows Subsystem สำหรับ Linux" มันมีการเรียกระบบ Linux, การทำงานของเอลฟ์, บางส่วนของ/procระบบไฟล์, Bash, GCC, (TODO น่าจะเป็น glibc?) apt-getและอื่น ๆ : https://channel9.msdn.com/Events/Build/2016/P488ดังนั้นฉันจึงเชื่อว่ามัน จะอนุญาตให้ Windows เรียกใช้ POSIX จำนวนมากหากไม่ใช่ทั้งหมด อย่างไรก็ตามจะเน้นไปที่นักพัฒนา / การปรับใช้แทนที่จะเป็นผู้ใช้ปลายทาง โดยเฉพาะอย่างยิ่งไม่มีแผนจะอนุญาตให้เข้าถึง Windows GUI ได้

ภาพรวมประวัติของความเข้ากันได้อย่างเป็นทางการของ Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwinเป็นโครงการบุคคลที่สามที่รู้จักกันดีของ GPL สำหรับ "ให้ฟังก์ชั่น POSIX API จำนวนมาก" สำหรับ Windows แต่ต้องการให้คุณ "สร้างแอปพลิเคชันของคุณจากแหล่งที่มาหากคุณต้องการให้ทำงานบน Windows" MSYS2เป็นโครงการที่เกี่ยวข้องที่ดูเหมือนว่าจะเพิ่มฟังก์ชั่นเพิ่มเติมที่ด้านบนของ Cygwin

Android

Android มีห้องสมุด C ของตัวเอง (Bionic) ซึ่งไม่รองรับ POSIX อย่างเต็มรูปแบบเนื่องจาก Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible

ระดับโบนัส

ลินุกซ์มาตรฐานฐานต่อขยาย POSIX

ใช้ดัชนีที่ไม่ใช่เฟรมซึ่งสามารถอ่านและค้นหาได้มากขึ้น: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

รับเวอร์ชันเต็มซิปของหน้า HTML สำหรับ grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939


คำถามเกี่ยวกับ POSIX และ SUS แต่คำตอบนี้ไม่ได้พูดถึง SUS เลย ...
Kidburla

1
@Kidburla เป็นโอกาสที่ดีในการเพิ่มคำตอบของคุณเองและรับตัวแทน :-) (หรือแก้ไขเป็นของฉันและให้ฉันตัวแทน hehe)
Ciro Santilli 新疆改造中心中心法轮功六四事件


@phuclv ขอบคุณฉันได้เพิ่มคำตอบนั้นแล้ว
Ciro Santilli 新疆改造中心法轮功六四事件

16

POSIX เป็นมาตรฐานระบบปฏิบัติการพกพา มันอธิบายถึงยูทิลิตี้, APIs และบริการบางอย่างที่ระบบปฏิบัติการที่เป็นไปตามข้อกำหนดจะต้องจัดเตรียมให้กับซอฟต์แวร์ (เช่นซ็อกเก็ต, ไฟล์ I / O และเธรด) พร้อมกับข้อตกลงเกี่ยวกับวิธีการเรียกสิ่งเหล่านี้จากโปรแกรม

แนวคิดคือโปรแกรมที่เขียนขึ้นสำหรับ POSIX ที่สอดคล้องกับระบบปฏิบัติการหนึ่งจะง่ายต่อการพอร์ตไปยังระบบปฏิบัติการที่รองรับ POSIX อื่นได้ง่ายกว่าการทำพอร์ตระหว่างระบบปฏิบัติการที่ไม่สอดคล้องกับ POSIX นี่คือเหตุผลว่าทำไมการพอร์ตแอปพลิเคชันจาก FreeBSD ถึง Linux ได้ง่ายกว่าการพอร์ตจาก FreeBSD ไปเป็น Windows (แม้ว่า Windows จะสนับสนุน POSIX ย่อยบางส่วน)


14

POSIX เป็นชุดย่อยของ UNIX ซึ่งมีวัตถุประสงค์เพื่อครอบคลุมสภาพแวดล้อม Unix ที่คล้ายกันสำหรับระบบปฏิบัติการอื่น สิ่งนี้รวมถึงสภาพแวดล้อมเช่น Eunice สำหรับ VMS บุคลิกภาพ POSIX ของ Windows NT และ Apollo Domain / OS คุณสามารถคิดว่ามันเป็น API พกพามาตรฐานสำหรับชุดย่อยของบริการระบบปฏิบัติการที่มีพฤติกรรมเหมือนกันระหว่าง Unix และไม่ใช่ Unix ดูhttp://standards.ieee.org/develop/wg/POSIX.htmlสำหรับข้อมูลเพิ่มเติม


ฉันได้อ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ในตอนนี้และแน่นอนว่า Uinx เป็นไก่และ POSIX เป็นไข่ .. แต่ฉันสงสัยว่า UNIX ยังคงปกครอง roost .. เช่น .. POSIX มีชีวิตเป็นของตัวเองในขณะนี้ และ UNIX จะต้องปฏิบัติตาม POSIX หรือไม่ ... btw ดูเหมือนว่าชื่อ POSIX ถูก coinded โดยริชาร์ดสตอลแมน ....
Peter.O

@ fred.bear: คำตอบสั้น ๆ : UNIX (เครื่องหมายทางการค้า) จะต้องสอดคล้องกับ POSIX; Unix (ผลิตภัณฑ์) เป็นพื้นฐานหลักสำหรับ POSIX; unices (ตระกูลของ OS) ส่วนใหญ่จะเข้ากันได้ แต่มีเหมือนกันมากกว่า เห็นLinux เป็น Unix หรือไม่ และMac OS X, UNIX คืออะไร? สำหรับการสนทนาที่เกี่ยวข้อง
Gilles

@ fred-bear หลายคนอ้างว่ามาตรฐาน POSIX ได้รับการชี้นำจากชุมชนการพัฒนาเคอร์เนล Linux ซึ่ง (ถ้าเป็นจริง) IMHO ไม่ใช่สิ่งที่ดี ...
sakisk

1
@faif ฉันไม่เคยได้ยินเรื่องนี้และพบว่าเป็นไปได้ยากคุณสามารถโพสต์ข้อมูลอ้างอิงได้หรือไม่?
penguin359

2
@Gilles The Open Group เจ้าของเครื่องหมายการค้าUNIX®เป็นผู้รับผิดชอบการรับรองและข้อกำหนดของUNIX®ซึ่งเรียกว่า Single UNIX Specification หรือ SUS POSIX ได้รับการพัฒนาโดย IEEE ซึ่งไม่ได้รับผิดชอบUNIX® ตั้งแต่ปี 2544 พวกเขาได้รับการพัฒนาส่วนใหญ่ในการซิงค์ แต่ในทางเทคนิคแล้ว SUS ซึ่งตอนนี้เป็นเวอร์ชั่น 4 ที่กำหนดUNIX®
penguin359
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.