ความหมายของ“ POSIX” คืออะไร?


898

POSIX คืออะไร ฉันได้อ่านบทความ Wikipediaและฉันอ่านทุกครั้งที่พบคำศัพท์ ความจริงก็คือฉันไม่เคยเข้าใจจริงๆว่ามันคืออะไร

ทุกคนช่วยอธิบายให้ฉันฟังได้ไหมโดยอธิบาย "ความต้องการ POSIX" ด้วยหรือไม่



การอ้างอิงคำจำกัดความโดยย่อ - whatis.techtarget.com/definition/…
— parasrish

คำตอบ:


622

POSIXเป็นตระกูลของมาตรฐานที่ระบุโดยIEEEเพื่อให้ความกระจ่างและทำให้เกิดความเท่าเทียมกันในการเขียนโปรแกรมแอปพลิเคชัน (และปัญหาเสริมเช่น commandline shell อรรถประโยชน์) ที่จัดทำโดยระบบปฏิบัติการ Unix-y เมื่อคุณเขียนโปรแกรมของคุณให้ใช้มาตรฐาน POSIX คุณสามารถมั่นใจได้ว่าจะสามารถทำการพอร์ตได้อย่างง่ายดายในหมู่อนุพันธ์ Unix ตระกูลใหญ่ ๆ (รวมถึง Linux แต่ไม่ จำกัด เฉพาะ!); ถ้าและเมื่อคุณใช้ Linux API บางตัวที่ไม่ได้มาตรฐานเป็นส่วนหนึ่งของ Posix คุณจะมีเวลาที่ยากขึ้นถ้าคุณต้องการพอร์ตโปรแกรมหรือไลบรารีนั้นไปยังระบบ Unix-y อื่น ๆ (เช่น MacOSX) ในอนาคต


34
ไม่มาตรฐานอยู่ในระดับ API - การโทรที่ระบุแต่ละรายการสามารถนำไปใช้ในเคอร์เนลหรือในไลบรารี C ในแง่ของการโทรอีกครั้งและนั่นก็ใช้ได้สำหรับ Posix (และสำหรับโปรแกรมของคุณด้วย ;-) MacOSX เป็นตาม POSIX ดูdevworld.apple.com/leopard/overview/osfoundations.html สำหรับ Windows ดูen.wikipedia.org/wiki/POSIX#POSIX_for_Windows : การปฏิบัติตาม Posix นั้นรวมอยู่ใน Enterprise และ Ultimate Editions เท่านั้น (ไม่ใช่ในราคาที่ถูกกว่า! -) แม้ว่าคุณจะได้รับ Partways ด้วย Cygwin, en.wikipedia org
— Alex Martelli

23
ความคิดเห็นของคุณมีข้อบกพร่องเนื่องจากอย่างน้อยส่วนแบ่งการตลาดของ Microsoft บนเดสก์ท็อปทำให้ "เป็นสิ่งที่โลกตามมา"
— Jed Smith

29
ฉันคิดว่าสิ่งที่กรงเล็บหมายถึงคือ Microsoft ไม่ได้ใช้ความพยายามมากในการทำงานร่วมกับแพลตฟอร์มอื่น ๆ
— mipadi

12
@deltaray กอดขยายและดับ MS java (ไม่ใช่มาตรฐาน java.util. java.security, java.io, java.lang และ java.awt), Internet Explorer (เกือบจะพูดว่า 'exploder') และ. NET (ใช่ฉันรู้ว่าพวกเขาได้เปิดตัวบางส่วน แหล่งที่มาสำหรับ. NET แต่ลิขสิทธิ์มีข้อ จำกัด และยังไม่ใช่พอร์ต linux แต่ Mono ไม่สมบูรณ์) นอกจากนี้exFAT สิทธิบัตร คุณถูกต้องอย่างแน่นอน
— Wyatt8740

25
Microsoft's market share on desktops, at least, makes it "what the world follows"- น่าสนใจที่จะทราบว่ามีอะไรเปลี่ยนแปลงไปมากนักตั้งแต่ความคิดเห็นนี้ตั้งแต่ปี 2009 :)
— GMA

516

สิ่งที่สำคัญที่สุด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ต้องการแนวคิดของกระบวนการ

    หลายลินุกซ์สายระบบที่มีอยู่เพื่อใช้ฟังก์ชั่นที่เฉพาะเจาะจง POSIX C API และทำให้ลินุกซ์ที่สอดคล้องเช่น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 เพิ่ม:

    • 126พบคำสั่ง แต่ไม่สามารถเรียกใช้งานได้

    • 127: ไม่พบคำสั่ง.

    • > 128: สิ้นสุดโดยสัญญาณ

      แต่ POSIX ดูเหมือนจะไม่ระบุ128 + SIGNAL_IDกฎที่ใช้โดย Bash: /unix/99112/default-exit-code-when-process-is-terminated

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

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

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

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

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

  7. โครงสร้างไดเรกทอรี

    เช่น/dev/null,/tmp

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

  8. ชื่อไฟล์

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

    ดูเพิ่มเติมที่: การปฏิบัติตาม posix สำหรับระบบไฟล์คืออะไร?

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

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

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

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

    ดูเพิ่มเติม: มีมาตรฐานสำหรับสวิตช์บรรทัดคำสั่งและอาร์กิวเมนต์ของ Linux หรือไม่

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

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

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

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

  • OS X (Apple) X หมายถึงทั้ง 10 และ UNIX เป็นระบบ Apple POSIX ระบบแรกที่เปิดตัวในปี 2001 ดูเพิ่มเติม: OSX เป็น 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: รองรับ Android POSIX หรือไม่?

ระดับโบนัส

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

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

รับเวอร์ชันเต็มของหน้า HTML สำหรับการ grepping: รายการฟังก์ชัน POSIX C API อยู่ที่ไหน


17
ตัวอย่างที่ยอดเยี่ยมถ้าคุณมีคำจำกัดความเช่นเดียวกับคำตอบที่ได้รับการยอมรับนี่จะเป็นคำตอบที่ดีที่สุด
— Marc

8
@ Marc ขอบคุณ! ฉันพยายามที่จะไม่ทำซ้ำสิ่งที่พูดในคำตอบอื่น ๆ เพราะคนอาจอ่านแล้วและหลีกเลี่ยงการซ้ำซ้อน ;-) นี่เป็นปัญหาที่ทราบกันดี: meta.stackoverflow.com/questions/305645/…
— Ciro Santilli 冠状病毒审查六四事件法轮功

1
เป็นความคิดที่ดีที่จะอธิบายว่า POSIX ครอบคลุมอะไรบ้าง
— sleske

4
ทุกที่ในวรรณกรรมการอ้างอิงถึงป๊อปอัป "การปฏิบัติตาม POSIX" และคำจำกัดความทั่วไปของผู้คน POSIX พบคือ "ชุดมาตรฐานสำหรับการทำงานร่วมกันระหว่างระบบปฏิบัติการ Unix-like" แม้ว่าจะมีประโยชน์ แต่คำจำกัดความนี้ทิ้งความสงสัยมากมายโดยเฉพาะเกี่ยวกับคุณสมบัติที่คาดว่าจะทำงานร่วมกัน แน่นอนว่าคุณสามารถไปอ่านข้อมูล POSIX ทั้งหมดเพื่อเจาะลึกรายละเอียด (และใช้เวลามากกับเรื่องนั้น) แต่คำตอบนี้ให้บทสรุปที่จำเป็นมากเพื่อให้ได้ภาพรวมขนาดใหญ่ในขอบเขตของ POSIX ขอขอบคุณ Ciro ที่สละเวลาเขียน!
— ARX

มันอาจเป็นการดีที่จะเพิ่ม Posix รับประกันบางอย่างเกี่ยวกับประเภทจำนวนเต็ม ฉันไม่รู้ว่าอะไรคืออะไรและไม่ได้ระบุ แต่ฉันรู้ว่าอย่างน้อย Posix ต้องมี uint8_t, uint16_t, uint32_t และประเภทที่ลงนามที่เกี่ยวข้อง ฉันไม่แน่ใจว่ามันรับประกันว่าประเภทเช่น "int" มีขนาดกำลังของสองหรือไม่และระบบจะไม่ทำสิ่งที่น่ารังเกียจเหมือนมี "int" ที่มีค่า 32 บิตบิตลง 1 และบิตที่เพิ่มขึ้น 31 บิต [ดังนั้นการเพิ่ม uint32_t จึงทำให้ได้ UB] หากคุณมีมาตรฐานที่มีประโยชน์มันอาจจะดีที่จะพูดในสิ่งที่และไม่รับประกันในเรื่องนั้น
— supercat

74

POSIXคือ:

POSIX (ออกเสียง / ˈpɒzɪks /) หรือ "Portable Operating System Interface [สำหรับ Unix]" 1เป็นชื่อของตระกูลของมาตรฐานที่เกี่ยวข้องที่ระบุโดย IEEE เพื่อกำหนดอินเตอร์เฟสการเขียนโปรแกรมประยุกต์ (API) พร้อมด้วยอินเตอร์เฟสเชลล์และยูทิลิตี้สำหรับซอฟต์แวร์ เข้ากันได้กับตัวแปรของระบบปฏิบัติการ Unix แม้ว่ามาตรฐานสามารถนำไปใช้กับระบบปฏิบัติการใด ๆ

โดยทั่วไปมันเป็นชุดของมาตรการเพื่อบรรเทาความเจ็บปวดจากการพัฒนาและการใช้รสชาติที่แตกต่างของ UNIX โดยมี API ส่วนใหญ่ (ส่วนใหญ่) และยูทิลิตี้ทั่วไป POSIX ที่ จำกัด ก็มีการขยายไปยัง Windows เวอร์ชันต่างๆเช่นกัน


1. คุณหมายถึง POSIX บอกว่า * ระบบปฏิบัติการ (เมล็ด) ทั้งหมดควรมีชุดการเรียกระบบเหล่านี้อย่างน้อยที่สุด ขวา? 2. WINDOWS / MAC ติดตาม POSIX หรือไม่ ถ้า / ถ้าไม่ WINDOWS (95,98,2000, xp, vista, 7) ทำตามมาตรฐานทั่วไป (อาจเป็นกรรมสิทธิ์ของตนเอง) มาตรฐาน? กล่าวอีกนัยหนึ่ง POSIX ใน Microsoft world ==?
— กรงเล็บ

1
โดยพื้นฐานแล้วมันคือชุดของมาตรการเพื่อบรรเทาความเจ็บปวดจากการพัฒนา WAS ??
— กรงเล็บ

5
ฉันถามการใช้คำว่าเป็นเหมือนกัน แต่มันเป็นเรื่องที่ถกเถียงกัน เพื่อตอบคำถามของคุณ: (1) ไม่ POSIX มี zilch อย่างที่ต้องทำกับเคอร์เนลเพียงอธิบายถึงวิธีการใช้งาน (2) OS X เป็น BSD และค่อนข้างเข้ากันได้กับ POSIX แต่มีพื้นที่สีเทา Windows 2008 ใกล้เคียงกับการร้องเรียน POSIX มากที่สุด ไม่มีเทียบเท่า POSIX ในโลก Microsoft
— Jed Smith

1
@claws: ไม่ได้หมายความว่าจะสกปรกในพื้นที่ภายใต้คำตอบของ cletus ... แต่ ฉันลิงก์ POSIX.1-2008 ในคำตอบของฉัน ... ตรงนั้น
— Jed Smith

3
@Jed Smith ไม่มีพื้นที่สีเทาในแง่ของการปฏิบัติตาม Mac OS X; Mac OS X ได้รับการรับรองตามข้อกำหนด Single UNIX v3 ซึ่งเป็นมาตรฐานที่ POSIX เป็นชุดย่อย
— ไมเคิลแอรอน Safyan

43

ผมขออธิบายอย่างไม่เป็นทางการ

POSIX เป็นชุดของมาตรฐานที่พยายามแยกแยะระบบ "UNIX" และ UNIX ที่คล้ายกับระบบที่เข้ากันไม่ได้ มันถูกสร้างขึ้นโดยรัฐบาลสหรัฐเพื่อวัตถุประสงค์ในการจัดซื้อจัดจ้าง แนวคิดก็คือว่าการจัดหาของรัฐบาลกลางสหรัฐจำเป็นต้องมีวิธีในการระบุข้อกำหนดตามกฎหมายสำหรับการเสนอราคาและสัญญาประเภทต่าง ๆ ในลักษณะที่สามารถนำมาใช้เพื่อแยกระบบที่ระบบฐานรหัสหรือพนักงานเขียนโปรแกรมที่มีอยู่เดิมไม่สามารถพกพาได้

เนื่องจาก POSIX เขียนโพสต์พฤตินัย ... เพื่ออธิบายชุดของระบบการแข่งขันที่คล้ายคลึงกันอย่างหลวม ๆ ... มันไม่ได้ถูกเขียนในวิธีที่สามารถนำไปใช้ได้

ตัวอย่างเช่น NT ของ Microsoft ถูกเขียนด้วยความสอดคล้อง POSIX มากพอที่จะมีคุณสมบัติสำหรับการเสนอราคาบางอย่าง ... แม้ว่าระบบย่อย POSIX นั้นไม่มีประโยชน์ในแง่ของการพกพาในทางปฏิบัติและความเข้ากันได้กับระบบ UNIX

มาตรฐานอื่น ๆ สำหรับ UNIX ได้ถูกเขียนขึ้นในช่วงหลายทศวรรษที่ผ่านมา สิ่งต่างๆเช่น SPEC1170 (ระบุสิบเอ็ดร้อยเจ็ดสิบฟังก์ชั่นการโทรซึ่งจะต้องมีการใช้งานร่วมกันได้) และสาขาต่าง ๆ ของ SUS (สเปค UNIX เดียว)

ส่วนใหญ่ "มาตรฐาน" เหล่านี้ไม่เพียงพอต่อการใช้งานด้านเทคนิคใด ๆ พวกเขาส่วนใหญ่มีอยู่สำหรับการถกเถียงโต้แย้งทางกฎหมายและเหตุผลที่ผิดปกติอื่น ๆ


1
ถ้าเช่นนั้นลีนุกซ์จะใช้ POSIX เป็นส่วนใหญ่ได้อย่างไร
— ninjalj

8
@ninjalj: Linux เขียนขึ้นเพื่อนำไปใช้กับชุดฟังก์ชัน UNIX ที่เหมือนจริง การทำเช่นนั้นในขณะที่สอดคล้องกับ POSIX ทำให้รู้สึกที่สมบูรณ์แบบ อย่างไรก็ตามประเด็นของฉันคือ POSIX ไม่ได้ถูกสร้างขึ้นเป็นสเปคสำหรับการใช้ระบบปฏิบัติการใหม่ ... มันถูกสร้างขึ้นเป็นวิธีสำหรับเจ้าหน้าที่จัดซื้อจัดจ้างภาครัฐของสหรัฐฯ . การมุ่งเน้นใน Linux คือการให้คุณสมบัติที่ใช้งานได้ในลักษณะที่เข้ากันได้อย่างสมเหตุสมผลแข็งแรงและมีประสิทธิภาพ POSIX ไม่ใช่อุบัติเหตุตลอดทาง
— Jim Dennis

3
ค่อนข้างฉลาดของคุณที่จะอ้างว่า POSIX เขียนโพสต์พฤตินัย! นั่นคือจุดเด่นขององค์กรพัฒนามาตรฐานที่ดี (SDO) ที่ไม่ได้รับฉันทามติจนกว่าจะมีการปฏิบัติตามอย่างน้อยหนึ่งอย่าง
— fpmurphy

4
@fpmurphy: การสร้างข้อมูลจำเพาะหลังการโพสต์พฤตินัยตามหนึ่งหรือสองการใช้งานร่วมกันเป็นบรรทัดฐานสำหรับ IETF ... มาตรฐานโปรโตคอลเครือข่ายที่มีปฏิสัมพันธ์มากกว่าข้อต่อหลวมโดยเจตนา มันไม่ได้เป็นกระบวนการที่ประสบความสำเร็จสำหรับมาตรฐานระบบปฏิบัติการ API ระหว่างโปรแกรมและระบบ (เคอร์เนลหรือ microkernel และเซิร์ฟเวอร์ระบบย่อย) นั้นมีความแน่นหนากว่าไคลเอนต์และเซิร์ฟเวอร์หรือเพื่อนผ่านเครือข่าย (ฉันไม่ได้บอกว่ามันเป็นไปไม่ได้ แต่เพียงชี้ให้เห็นว่ามีความแตกต่างและประวัติศาสตร์ไม่ได้แสดงให้เห็นถึงแนวโน้มหลัง)
— จิมเดนนิส

2
ความพยายามของ IEEE ในการระบุ POSIX ย้อนกลับไปในปี 1985 นั้นถูกกระตุ้นโดยรัฐบาลสหรัฐ ทำวิจัยอ่านหนังสือประวัติศาสตร์หรืออะไรซักอย่าง
— rustyx

29

POSIX เป็นมาตรฐานสำหรับระบบปฏิบัติการที่ควรทำให้การเขียนซอฟต์แวร์ข้ามแพลตฟอร์มง่ายขึ้น มันเป็นเรื่องใหญ่โดยเฉพาะในโลกของ Unix


15
ไม่ใช่แค่ "ควรจะ" ทำให้ง่ายต่อการเขียนรหัสข้ามแพลตฟอร์ม แต่จะทำให้ง่ายต่อการเขียนรหัสข้ามแพลตฟอร์ม ข้อยกเว้นเพียงอย่างเดียวคือ Windows เพราะ Microsoft คิดว่าดีกว่าอย่างอื่นทุกคนและไม่จำเป็นต้องปฏิบัติตาม อย่างไรก็ตามฉันคาดการณ์ว่าสิ่งนี้จะทำงานกับพวกเขาโดยเฉพาะอย่างยิ่งเมื่อ Mac และ Linux ได้รับส่วนแบ่งการตลาดเพิ่มขึ้น หากพวกเขามีไว้สำหรับ "นักพัฒนานักพัฒนานักพัฒนา" พวกเขาจะตระหนักว่านักพัฒนาต้องการการปฏิบัติตาม UNIX
— ไมเคิลแอรอน Safyan

จากสิ่งที่ฉันได้ยินจากคนที่ทำงานกับมันอย่างใกล้ชิดมากกว่าที่ฉันเคยทำมันอาจทำให้สิ่งต่าง ๆ ง่ายขึ้น แต่แน่นอนว่ามันไม่เพียงพอสำหรับความประทับใจในการเขียนครั้งเดียวทำงานบน POSIX ส่วนใหญ่ ผู้คนจะได้รับเมื่อพวกเขาได้ยินว่าเป็น "มาตรฐาน" สำหรับระบบปฏิบัติการ
— แฮงค์เกย์

6
พวกเขาไม่คิดว่าพวกเขาจะ "ดีกว่าคนอื่น"; พวกเขารู้ว่าพวกเขาใหญ่กว่าคนอื่น นั่นเป็นเหตุผลที่พวกเขาจะเปลี่ยนเพลงเมื่อพวกเขาสูญเสียส่วนแบ่งการตลาด มันไม่เหมือนกันสำหรับพวกเขาเช่น Netscape เริ่มสนใจมาตรฐานเว็บมากขึ้นเมื่อพวกเขาไม่ได้รับความนิยมสูงสุดอีกต่อไป
— Ken

การเขียนแอปพลิเคชันเพื่อใช้ POSIX APIs เท่านั้นทำให้การพอร์ตระหว่างระบบปฏิบัติการ Unix และ Unix-like เหมือนกันง่ายขึ้น อย่างไรก็ตามมันเป็นมาตรฐานที่เป็นตัวส่วนร่วมที่ต่ำที่สุด - ดังนั้นยูทิลิตี้หรือแอปพลิเคชันที่เป็นระบบปฏิบัติการหรือฮาร์ดแวร์ที่เฉพาะเจาะจงมักจะต้องมีการเขียนใหม่
— fpmurphy

2
@Ken และนั่นคือสาเหตุที่เราไม่ควรปล่อยให้โครเมี่ยมของ Google เบาเกินไป
— Wyatt8740

29

POSIX เป็นชุดของมาตรฐานที่วางไว้โดย IEEE และ The Open Group ที่อธิบายถึงวิธีการทำงานของ Unix ในอุดมคติ โปรแกรมเมอร์ผู้ใช้และผู้ดูแลระบบทุกคนสามารถทำความคุ้นเคยกับเอกสาร POSIX และคาดหวังว่า Unix POSIX จะให้สิ่งอำนวยความสะดวกมาตรฐานทั้งหมดที่กล่าวถึง

เนื่องจากยูนิกซ์ทุกตัวทำสิ่งที่แตกต่างออกไปเล็กน้อย - Solaris, Mac OS X, IRIX, BSD และ Linux ล้วนมีลักษณะเฉพาะตัว - POSIX มีประโยชน์อย่างยิ่งสำหรับผู้ที่อยู่ในอุตสาหกรรมเนื่องจากกำหนดสภาพแวดล้อมมาตรฐานให้ทำงานตัวอย่างเช่น ฟังก์ชั่นส่วนใหญ่ในไลบรารี C นั้นอ้างอิงจาก POSIX ดังนั้นโปรแกรมเมอร์จึงสามารถใช้งานแอปพลิเคชั่นของเขาและคาดว่ามันจะทำงานเหมือนกันใน Unices ส่วนใหญ่

อย่างไรก็ตามพื้นที่ที่แตกต่างของ Unix มักจะมุ่งเน้นมากกว่าพื้นที่มาตรฐาน

สิ่งที่ดีเกี่ยวกับ POSIX คือคุณสามารถอ่านด้วยตัวเอง:

ข้อกำหนดเฉพาะของ Open Group Base ฉบับที่ 7

ปัญหาที่ 7 เป็นที่รู้จักกันในชื่อ POSIX.1-2008 และมีสิ่งใหม่ ๆ อยู่ในนั้น - อย่างไรก็ตาม Google-fu สำหรับ POSIX.1 และสิ่งนี้จะช่วยให้คุณเห็นประวัติทั้งหมดหลังสิ่งที่ Unix คือ


2
ฉันคิดว่าคุณกำลังใช้คำว่า "UNIX" ไม่ถูกต้อง ตอนนี้ UNIX อ้างถึง Single UNIX Specification และระบบปฏิบัติการ UNIX ใด ๆ เป็นระบบปฏิบัติการที่สอดคล้องกับ Single UNIX Specification บางทีคุณอาจหมายถึง UNIX เหมือน?
— ไมเคิลแอรอน Safyan

8
@Michael: ได้รับความคิดเห็นของคุณในคำตอบอื่น ๆ คุณเห็นได้ชัดว่าเป็นคนที่มีความคิดเห็นที่ไม่ได้สร้างสรรค์มากนัก ความคิดเห็นที่เฉพาะเจาะจงนี้มีความหมายอย่างมากและความหมายของฉันก็สื่อไปโดยไม่คำนึงถึงทางเลือกของฉลากที่คุณอาจไม่เห็นด้วย นอกจากนี้ Windows ยังรองรับ POSIX ในรุ่นที่สูงกว่า กรุณาหายใจออกและถอยกลับโปรด
— Jed Smith

1
@Jed Smith ความเห็นที่แข็งแกร่งนอกเหนือจากความหมายของโพสต์ก็คือระบบปฏิบัติการบางอย่างที่ได้รับการรับรองตาม UNIX นั้นไม่ใช่ ... ดังนั้นฉันคิดว่ามันยุติธรรมที่จะพูดว่ามันทำให้เข้าใจผิด นอกจากนี้สำหรับ Windows ตราบใดที่มีรุ่นที่ไม่สอดคล้องกันนักพัฒนาไม่สามารถพึ่งพา POSIX เมื่อกำหนดเป้าหมายแพลตฟอร์ม Windows ดังนั้นจึงปฏิเสธวัตถุประสงค์ทั้งหมดของการมี POSIX
— Michael Aaron Safyan

Unix เป็นระบบปฏิบัติการ UNIX เป็นแบรนด์ที่จัดโดย The Open Group ระบบที่ได้รับการรับรองทั้งโปรไฟล์การสร้างแบรนด์ UNIX95, UNIX98 หรือ UNIX03 ซึ่งเป็นไปตามข้อกำหนดเฉพาะของ UNIX รุ่นเดียวโดยเฉพาะในรูปแบบส่วนใหญ่ของข้อกำหนดการสร้างแบรนด์สามารถใช้คำว่า UNIX ได้
— fpmurphy

6

ในปี 1985 บุคคลจาก บริษัท ต่างๆทั่วอุตสาหกรรมคอมพิวเตอร์ได้ร่วมกันพัฒนามาตรฐาน POSIX (ส่วนต่อประสานระบบปฏิบัติการพกพาสำหรับสภาพแวดล้อมคอมพิวเตอร์) ซึ่งยึดตามมาตรฐาน UNIX System V Interface Definition (SVID) และมาตรฐานอื่น ๆ ก่อนหน้านี้ ความพยายามเหล่านี้ถูกกระตุ้นโดยรัฐบาลสหรัฐซึ่งต้องการสภาพแวดล้อมการคำนวณมาตรฐานเพื่อลดค่าใช้จ่ายในการฝึกอบรมและการจัดซื้อ POSIX เปิดตัวในปี 1988 เป็นกลุ่มมาตรฐาน IEEE ที่กำหนด API, เชลล์และยูทิลิตีอินเตอร์เฟสสำหรับระบบปฏิบัติการ แม้ว่าจะมุ่งไปที่ระบบที่คล้าย UNIX แต่มาตรฐานนั้นสามารถนำไปใช้กับระบบปฏิบัติการที่รองรับ ตอนนี้มาตรฐานเหล่านี้ได้รับการยอมรับแล้วผู้พัฒนาซอฟต์แวร์สามารถพัฒนาแอพพลิเคชั่นที่ทำงานบน UNIX, Linux,

จากหนังสือ: แนวทางปฏิบัติในการ Linux


4

Posix เป็นมากกว่าระบบปฏิบัติการมันเป็น "มาตรฐานระบบปฏิบัติการ" คุณสามารถจินตนาการว่ามันเป็นระบบปฏิบัติการจินตนาการซึ่งไม่มีอยู่จริง แต่มีเอกสารประกอบ เอกสารเหล่านี้เป็น "มาตรฐาน posix" ที่กำหนดโดย IEEE ซึ่งเป็นองค์กรมาตรฐานขนาดใหญ่ของสหรัฐอเมริกา ระบบปฏิบัติการที่ใช้งานข้อกำหนดนี้คือ "สอดคล้องกับ Posix"

กฎระเบียบของรัฐบาลต้องการโซลูชั่นที่สอดคล้องกับ Posix ในการลงทุนของพวกเขาดังนั้นการได้มาตรฐาน Posix จึงมีความได้เปรียบทางการเงินที่สำคัญโดยเฉพาะอย่างยิ่งสำหรับ บริษัท ไอทีขนาดใหญ่ในสหรัฐอเมริกา

รางวัลสำหรับระบบปฏิบัติการที่เป็นไปตาม posix อย่างสมบูรณ์ซึ่งเป็นการรับประกันว่ามันจะรวบรวมและเรียกใช้แอปพลิเคชันที่สอดคล้องกับ Posix ทั้งหมดอย่างราบรื่น

Linux เป็นที่รู้จักกันดีที่สุด OSX, Solaris, NetBSD และ Windows NT ก็มาเล่นที่นี่เช่นกัน ฟรีและ OpenBSD เป็นเพียง "เกือบ" สอดคล้องกับ Posix การปฏิบัติตามคำสั่ง posix ของ WinNT เป็นเพียงวิธีการแก้ปัญหาหลอกเพื่อหลีกเลี่ยงกฎระเบียบของรัฐบาลข้างต้น


3

มาตรฐานนี้ให้พื้นฐานทั่วไปสำหรับระบบปฏิบัติการแบบ Unix มันระบุว่าเชลล์ควรทำงานอย่างไรสิ่งที่คาดหวังจากคำสั่งเช่น ls และ grep และจำนวนไลบรารี C ที่ผู้เขียน C สามารถคาดหวังได้

ตัวอย่างเช่นไพพ์ที่ผู้ใช้บรรทัดคำสั่งใช้เพื่อรวมคำสั่งต่างๆเข้าด้วยกันถูกระบุในรายละเอียดที่นี่ซึ่งหมายความว่าฟังก์ชั่น popen (ไพพ์โอเพ่น) ของ POS เป็นมาตรฐาน POSIX ไม่ใช่ ISO C-standard


3

POSIX ย่อมาจาก Portable Operating System Interface และเป็นมาตรฐาน IEEE ที่ออกแบบมาเพื่ออำนวยความสะดวกในการพกพาแอปพลิเคชัน POSIX เป็นความพยายามโดยกลุ่มผู้ขายเพื่อสร้าง UNIX รุ่นมาตรฐานเดียว


0

POSIX กำหนดชุดมาตรฐานสำหรับระบบปฏิบัติการหรือโปรแกรม เป้าหมายคือการเขียนซอฟต์แวร์ใหม่ที่เข้ากันได้กับระบบเหมือน UNIX

ตัวอย่างเช่นโปรแกรมที่ทำงานบน Linux นั้นยังสามารถรวบรวมและเรียกใช้บนระบบที่คล้าย UNIX อื่น ๆ เช่น Solaris, HP-UX และ AIX เป็นต้น

ตัวอย่างที่ได้รับความนิยมมากที่สุดGNU Bashคือ POSIX 100% และgawkยูทิลิตี้


0

POSIX ควบคุมการทำงานร่วมกันพกพาและในพื้นที่อื่น ๆ เช่นการใช้งานและกลไกของส้อมสิทธิ์และมาตรฐานระบบแฟ้มเช่น / ฯลฯ / var / usr และอื่น ๆ ดังนั้นเมื่อนักพัฒนาเขียนโปรแกรมภายใต้ระบบที่เข้ากันได้กับ Posix เช่น Linux โดยทั่วไปไม่รับประกันว่าจะทำงานบนระบบที่เข้ากันได้กับ posix อื่นเช่นระบบ AIX ของ IBM หรือตัวแปรเชิงพาณิชย์อื่น ๆ ของ Unix Posix เป็นสิ่งที่ดีที่จะมีเช่นนี้มันช่วยลดการพัฒนาซอฟต์แวร์สำหรับการพกพาสูงสุดที่มันมุ่งมั่น หวังว่าคำตอบนี้สมเหตุสมผล

ขอบคุณ Jed Smith และ Tinkertim ที่ชี้ให้เห็นข้อผิดพลาดของฉัน - ของฉันไม่ดี !!! :(


มาตรฐานระบบไฟล์ได้รับการจัดการนอก POSIX
— Jed Smith

คุณกำลังสับสน POSIX กับสิ่งต่าง ๆ เช่น LSB (ฐานมาตรฐาน Linux) สอง (ส่วนใหญ่) ระบบปฏิบัติการที่สอดคล้องกับ POSIX จะเป็น FBSD และ Linux แต่ทั้งคู่มีระบบไฟล์ที่แตกต่างกันและการติดตั้งไลบรารีเริ่มต้น
— ทิมโพสต์

0

ข้อมูลจำเพาะ (พิมพ์เขียว) เกี่ยวกับวิธีทำให้ระบบปฏิบัติการใช้งานร่วมกับระบบปฏิบัติการ UNIX ปลายสายได้ (ขอให้พระเจ้าคุ้มครองเขา!) นี่คือเหตุผลที่ว่าทำไม macOS และ GNU / Linux จึงมีบรรทัดคำสั่งเทอร์มินัลคล้ายกัน GUI ของไลบรารี ฯลฯ เพราะทั้งคู่ได้รับการออกแบบตาม POSIX พิมพ์เขียว

POSIX ไม่ได้บอกวิศวกรและโปรแกรมเมอร์ว่าจะใช้รหัสอย่างไร แต่จะใช้รหัสอะไร


-1

ข้อเท็จจริงบางประการเกี่ยวกับ POSIX ที่ไม่ค่อยสดใส

POSIX ยังเป็นส่วนต่อประสานการโทรของระบบหรือ API และมีอายุเกือบ 30 ปี

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

การรักษาความปลอดภัยไม่ใช่ประเด็นสำคัญใน POSIX โดยการออกแบบซึ่งนำไปสู่การโจมตีสภาพการแข่งขันจำนวนมากในช่วงหลายปีที่ผ่านมาและบังคับให้โปรแกรมเมอร์ทำงานเพื่อแก้ไขข้อ จำกัด เหล่านี้

ข้อผิดพลาดที่ร้ายแรงยังคงถูกค้นพบข้อบกพร่องที่อาจได้รับการป้องกันด้วยการออกแบบ POSIX API ที่ปลอดภัยยิ่งขึ้น

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

API แบบซิงโครนัสนี้ไม่ดีเป็นพิเศษสำหรับการเข้าถึงรีโมตและคลาวด์ออบเจ็กต์ซึ่งมีความหน่วงแฝงสูง


เคอร์เนล API แบบซิงโครนัสไม่จำเป็นต้องหมายถึงกระบวนการแบบเธรดเดี่ยวและ IO แบบอนุกรม มันไม่มีอะไรเกี่ยวข้องกับเครื่อง SMP สิ่งเหล่านี้ไม่เกี่ยวข้องอย่างสมบูรณ์ (ในขณะที่ฉันยอมรับว่า sync kernel API นั้นไม่ดีเท่าที่ควร แต่อย่างมากในโพสต์ของคุณ)
— peterh - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.