คำถามติดแท็ก posix

POSIX เป็นตัวย่อสำหรับ Portable Operating System Interface ซึ่งเป็นตระกูลมาตรฐานที่ IEEE กำหนดไว้สำหรับการรักษาความเข้ากันได้ระหว่างระบบปฏิบัติการ

5
“ การเรียกของระบบ” มีความหมายอย่างไรหากไม่มีการใช้งานในภาษาโปรแกรม
ฉันต้องการที่จะเข้าใจคำว่า "การเรียกระบบ" ฉันคุ้นเคยกับการเรียกใช้ระบบเพื่อรับบริการเคอร์เนลจากแอปพลิเคชัน userspace ส่วนที่ฉันต้องการชี้แจงด้วยคือความแตกต่างระหว่าง "การเรียกระบบ" และ "การใช้งาน C ของการเรียกระบบ" นี่คือข้อความที่ทำให้ฉันสับสน: บนระบบที่คล้าย Unix API นั้นมักจะเป็นส่วนหนึ่งของการใช้งาน C library (libc) เช่น glibc ซึ่งมีฟังก์ชั่น wrapper สำหรับการโทรของระบบซึ่งมักจะตั้งชื่อเหมือนกับการเรียกระบบที่พวกเขาเรียก "การเรียกระบบที่พวกเขาเรียก" คืออะไร? แหล่งของพวกเขาอยู่ที่ไหน ฉันสามารถรวมพวกเขาโดยตรงในรหัสของฉัน? "การเรียกของระบบ" ในแง่สามัญเพียงแค่ POSIX อินเตอร์เฟสที่กำหนด แต่จริง ๆ แล้วเห็นการใช้งานอย่างใดอย่างหนึ่งสามารถตรวจสอบแหล่ง C และในนั้นดูว่าผู้ใช้จริงเพื่อการสื่อสารเคอร์เนลจริงไป? บันทึกพื้นหลัง: /devฉันพยายามที่จะเข้าใจถ้าในท้ายที่สุดแต่ละฟังก์ชั่นคปลายขึ้นโต้ตอบกับอุปกรณ์จาก
14 kernel  c  posix  system-calls 

2
วิธีที่สอดคล้องกับ POSIX ในการทำงานกับรายการชื่อไฟล์ที่อาจมีช่องว่าง
ฉันได้เห็นคำแนะนำในการเขียนสคริปต์ของ Bash แนะนำให้ใช้อาร์เรย์สำหรับทำงานกับชื่อไฟล์ที่มีช่องว่าง แต่DashAsBinShชี้ให้เห็นว่าอาร์เรย์ไม่สามารถเคลื่อนย้ายได้ดังนั้นฉันกำลังมองหาวิธีการทำงานร่วมกับ POSIX ในการทำงานกับรายการชื่อไฟล์ที่อาจมีช่องว่าง ฉันต้องการแก้ไขสคริปต์ตัวอย่างด้านล่างเพื่อที่จะได้ echo foo/target/a.jar foo/target/b.jar bar/target/lol whitespace.jar นี่คือสคริปต์ #!/usr/bin/env sh INPUT="foo/target/a.jar foo/target/b.jar bar/target/b.jar bar/target/lol whitespace.jar" # this would be produced by a 'ls' command # We can execute the ls within the script, if it helps dostuffwith() { echo $1; }; F_LOCATIONS=$INPUT ALL_FILES=$(for f in …

4
ค้นหา -exec ในสคริปต์ทุบตีพร้อมส่วนขยายตัวแปร
ฉันพยายามเรียกใช้คำสั่งคล้ายกับคำสั่งด้านล่างในสคริปต์ทุบตี มันควรจะค้นหาผ่านโฟลเดอร์ย่อยทั้งหมดและคัดลอกไฟล์ทั้งหมดของบางประเภทให้อยู่ในระดับรากของ$sourcedir$targetdir #!/bin/bash # These are set as arguments to the script, not hard-coded sourcedir="/path/to/sourcedir" targetdir="/path/to/targetdir" find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2/`basename "$1"`"' "{}" "$targetdir" \; นี้ดูเหมือนว่าจะสวยใกล้เคียงยกเว้นว่า{}จะไม่ถูกส่งผ่านไปในขณะที่$2ไป-exec sh -c ... ฉันต้องการทำเช่นนี้ให้ใกล้เคียงกับ "ทางที่ถูกต้อง" ที่สุดเท่าที่จะทำได้ด้วยความอดทนสำหรับตัวละครพิเศษในชื่อไฟล์ แก้ไข:ฉันเห็นคนแนะนำให้ใช้xargsหรือการผูกมัดข้อโต้แย้ง ฉันอยู่ภายใต้การแสดงผลว่านี่เป็นเพียงข้อโต้แย้งที่ จำกัด ตัวอย่างเช่นถ้าฉันมีไฟล์. jpg หลายพันไฟล์ที่ฉันพยายามคัดลอกจากไดเรกทอรีแกลเลอรี่จำนวนมากไปยังไดเรกทอรีสไลด์โชว์ยักษ์โซลูชั่นการเชื่อมโยงจะยังคงใช้งานได้หรือไม่ แก้ไข 2:ปัญหาของฉันคือฉันหายไป_ก่อนที่ตัวเลือกแรกของฉันที่จะดวลจุดโทษใน-execคำสั่ง สำหรับทุกคนที่สงสัยเกี่ยวกับวิธีทำให้คำสั่ง find ทำงานได้เพิ่ม_และทุกอย่างจะดีขึ้น: …

2
ฉันจะหาเอกสารอย่างเป็นทางการ POSIX และ UNIX ได้จากที่ไหน?
ฉันกำลังมองหาเอกสารอย่างเป็นทางการเกี่ยวกับมาตรฐานและข้อกำหนดของ POSIX ทั้งหมด ฉันต้องการอ่านเอกสารเพื่อให้เข้าใจระบบยูนิกซ์ได้ดีขึ้นและพวกเขาทำงานในระดับต่ำได้อย่างไร ฉันเคยเห็นลิงก์ที่นี่และไปที่ opengroup.org ซึ่งฉันคิดว่าเป็นหน่วยงานที่อยู่เบื้องหลังมาตรฐาน (แต่ฉันได้ยินมาว่า IEEE พูดถึงมากเกินไป) สำหรับบทสรุปที่ดีของ POSIX โปรดดูคำถามนี้: POSIX คืออะไร มันตอบคำถามมากมายสำหรับฉัน

1
POSIX Awk บน Solaris 11 หรือไม่
นี่เป็นคำถามที่ตามมาไม่มากก็น้อยสำหรับคำถามสองข้อต่อไปนี้: ข้อผิดพลาดทางไวยากรณ์ในการลบบรรทัดที่ซ้ำกันผ่านทางไฟล์ awk '! x [$ 0] ++' ทางเลือก awk / nawk บน SunOs และ Linux ฉันเห็นว่าใน Solaris 10 (SunOS 5.10) ฉันได้รับผลลัพธ์ต่อไปนี้: $ type -a awk awk is /usr/bin/awk $ PATH="$(getconf PATH)" type -a awk awk is /usr/xpg4/bin/awk awk is /usr/bin/awk $ บน Solaris 10 /usr/bin/awkไม่ยอมรับ POSIX ไวยากรณ์ Awk มาตรฐานเช่น'!x[$0]++'แต่/usr/xpg4/bin/awkทำ …
13 awk  solaris  posix 

2
คั่นเนมสเปซสำหรับฟังก์ชั่นและตัวแปรในเชลล์ POSIX
ในเส้นประฟังก์ชั่นและตัวแปรดูเหมือนจะอยู่ในเนมสเปซที่แยกต่างหาก: fn(){ fn="hello world" } fn; echo "The value is $fn!" #prints: The value is hello world! fn; echo "The value is $fn!" #prints: The value is hello world! #the fn variable doesn't conflict with the fn function นี่เป็นคุณลักษณะเฉพาะหรือการรับประกัน POSIX หรือไม่
13 shell  posix  dash 

3
mv เป็นอะตอมบน fs ของฉันหรือไม่
ฉันจะตรวจสอบว่าmvอะตอมของ fs (ext4) ของฉันได้อย่างไร? ระบบปฏิบัติการคือ Red Hat Enterprise Linux Server รีลีส 6.8 โดยทั่วไปฉันจะตรวจสอบสิ่งนี้ได้อย่างไร ฉันได้ดูไปรอบ ๆ และไม่พบว่าระบบปฏิบัติการของฉันเป็น POSIX มาตรฐานหรือไม่
13 posix  mv  move 


3
ไวยากรณ์ที่ถูกต้อง“ $ {PS1-}” และแตกต่างจากธรรมดา“ $ PS1” อย่างไร
ฉันกำลังดูสคริปต์ที่มี: if [ "${PS1-}" ]; then การติดตามนั้นทำให้-ฉันรำคาญเล็กน้อยเพราะดูเหมือนว่าจะไม่ได้ Posix หรือ Bash ไวยากรณ์มาตรฐาน นี่คือไวยากรณ์ที่ซ่อนเร้นอยู่ตลอดกาลหรือเป็นตัวพิมพ์ผิด การอ้างอิงใด ๆ ถึงมาตรฐาน / เอกสารจะได้รับการชื่นชม ปกติฉันจะรหัสมัน if [ "$PS1" ]; then ข้อใดถูกกว่าหรือมีข้อแตกต่างระหว่างกัน

1
จุดประสงค์ของการใช้เครื่องหมายอัศเจรีย์หลายอันใน sed คืออะไร?
POSIX เอกสาร sedกล่าวว่า: ฟังก์ชั่นสามารถนำหน้าด้วย '!' หนึ่งรายการหรือมากกว่า อักขระซึ่งในกรณีนี้จะใช้ฟังก์ชันถ้าที่อยู่ไม่ได้เลือกพื้นที่รูปแบบ ต้องยอมรับอักขระ <blank> ศูนย์หรือมากกว่าก่อนอักษรตัวแรก '!' ตัวละคร ไม่มีการระบุว่าอักขระ <blank> สามารถตาม '!' ได้หรือไม่ อักขระและแอปพลิเคชันที่สอดคล้องจะต้องไม่เป็นไปตาม '!' อักขระที่มีอักขระ <blank> ดังนั้นด้วย POSIX sed เราสามารถ: sed -e '/pattern/!d' file มันเหมือนกับการเขียน: sed -e '/pattern/!!d' file และ!!!dและnของเครื่องหมายอัศเจรีย์จะยังคงได้รับการปรับ (ทดสอบกับสามsedรุ่นจากมรดกตกทอด toolchest ) ฉันไม่เห็นประโยชน์ใด ๆ ระหว่างหลายรายการแทนที่จะแสดงเป็นอัศเจรีย์ ทำไมสเป็คอนุญาตให้ไวยากรณ์นั้นและมันมีประโยชน์ในการใช้งานจริง? ดูเหมือนว่า GNU sed ไม่เข้ากันกับกรณีนี้มันจะบ่นถ้าเราใช้อุทานหลายอย่าง: $ sed -e '/pattern/!!d' …
12 sed  posix 

1
เกี่ยวกับแบบพกพา sed -e ... db หรือ! ข?
ในการแก้ไข นี้Stéphane Chazelas POSIXify (อีกครั้ง)sedการจัดรูปแบบของฉันโดยการแทรกตัว-eแบ่ง xpression และ-eคำสั่ง xpression อื่น ตอนนี้ฉันอาจจะถามเขาว่าทำไมในความคิดเห็นฉันคิดว่า แต่มันก็มีการแก้ไขหมายเลข 18 ในคำตอบนั้นและเกือบทั้งหมดก่อนหน้านี้แล้วขอบคุณฟรีคล้ายกัน(ถ้าคุณสามารถเห็นความคิดเห็นที่ถูกลบคุณจะรู้ว่าสิ่งที่ ผมหมายถึง) นอกจากนี้ฉันคิดว่าฉันเข้าใกล้พอที่จะเข้าใจว่าทำไมวลีนี้ด้วยวิธีที่อาจมีประโยชน์มากกว่า ดังนั้นนี่คือความหวัง ... ฉันมักชอบที่จะให้ทั้งหมดของฉันsed -eXpressions ไปหนึ่งถ้าฉันอาจ แต่ฉันยังมีการตั้งค่ามากขึ้นสำหรับการเป็นไปตามสเปคที่ใกล้เท่าที่จะทำได้โดยเฉพาะอย่างยิ่งเมื่อความแตกต่างจะมีจำนวนไม่เกินและ<space> -eแต่ฉันไม่สามารถทำได้ถ้าฉันไม่เข้าใจว่าทำไมฉันควรทำ นี่เป็นบทสรุปสั้น ๆ เกี่ยวกับสถานะปัจจุบันของความเข้าใจของฉัน: ' -e 'แบ่ง portably สามารถยืนอยู่ในสำหรับsedสคริปต์\nแบ่ง ewline ในsedคำสั่งบรรทัดคำสั่ง ... ฉันยอมรับคลุมเครือเกี่ยวกับสาเหตุ วงเล็บปีกกาปิดในsed {ฟังก์ชั่น}จะต้องนำหน้าด้วยตัว\nแบ่ง ewline ตามที่ระบุไว้ที่นี่: <right-brace>จะนำหน้าด้วย<newline>และสามารถนำหน้าหรือตาม<blank>ตัวอักษร \nแบ่ง ewline เป็นสิ่งจำเป็นในทำนองเดียวกันต่อไปนี้การใช้งานใด ๆ ... a, b, c, i, r, t, …
12 shell  sed  posix 

4
POSIX จำกัด จำนวนไดเรกทอรีในระบบปฏิบัติการหรือไม่?
ฉันพยายามเรียนรู้มาตรฐาน POSIX เมื่อใช้ระบบปฏิบัติการยูนิกซ์ฉันได้/bin, /etc, /dev, /mediaและมักจะ/optแต่ที่ได้มาตรฐานหรือถึงการดำเนินการข้อมูลจำเพาะของคุณหรือไม่ อาจมีไดเรกทอรีจำนวนมากในรูทหรือถูก จำกัด โดยมาตรฐานหรือไม่

1
Posix ต้องการอุปกรณ์ใด ๆ หรือไม่?
Posix ต้องการอุปกรณ์ใด ๆ หรือไม่? ตัวอย่างเช่น/dev/urandom, /dev/zeroหรือ/dev/null? ฉันสงสัยว่าไม่ใช่เพราะระบบปฏิบัติการที่ไม่ใช่ * nix แต่ต้องการถามถึงความสมบูรณ์
12 devices  posix 

2
umask มีผลต่อ ACL อย่างไร
บางคนสามารถอธิบายให้ฉันทราบได้อย่างไรว่าumaskมีผลกระทบกับมาสก์เริ่มต้นของไฟล์ที่สร้างขึ้นใหม่หากเปิดใช้งาน ACL มีเอกสารเกี่ยวกับเรื่องนี้บ้างไหม? ตัวอย่าง: $ mkdir test_dir && cd test_dir $ setfacl -m d:someuser:rwx -m u:someuser:rwx . # give access to some user $ getfacl . # file: . # owner: myUsername # group: myGroup user::rwx user:someuser:rwx group::--- mask::rwx other::--- default:user::rwx default:user:someuser:rwx default:group::--- default:mask::rwx default:other::--- $ umask # show my …
12 linux  permissions  posix  acl 

1
POSIX sed ต้องการอะไรสำหรับ `1d; 1,2d 'ซึ่งช่วงที่อยู่เริ่มต้นจากบรรทัดที่ถูกลบไปแล้ว?
ในความคิดเห็นต่อคำถามนี้มีกรณีเกิดขึ้นที่การใช้งาน sed หลาย ๆ ครั้งไม่เห็นด้วยกับโปรแกรมที่ค่อนข้างง่ายและเรา (หรืออย่างน้อยฉัน) ไม่สามารถระบุได้ว่าสเปคนั้นต้องการอะไร ปัญหาคือพฤติกรรมของช่วงที่เริ่มต้นที่บรรทัดที่ถูกลบ: 1d;1,2d ควรลบบรรทัด 2แม้ว่าจุดเริ่มต้นของช่วงจะถูกลบออกก่อนที่จะถึงคำสั่งนั้นหรือไม่ ความคาดหวังเริ่มต้นของฉันคือ "ไม่" สอดคล้องกับ BSD sed ในขณะที่ GNU sed พูดว่า "ใช่" และการตรวจสอบข้อความข้อกำหนดไม่ได้ช่วยแก้ปัญหาทั้งหมด ที่ตรงกับความคาดหวังของฉัน (อย่างน้อย) MacOS และ Solaris sedและ sedBSD ไม่เห็นด้วยคือ (อย่างน้อย) GNU และ Busybox sedและผู้คนมากมายที่นี่ สองคนแรกได้รับการรับรองจาก SUS ขณะที่คนอื่น ๆ มีแนวโน้มที่จะแพร่หลายมากขึ้น พฤติกรรมใดที่ถูกต้อง? ข้อความข้อกำหนดสำหรับช่วงสองที่อยู่พูดว่า: sedยูทิลิตี้แล้วให้ใช้บังคับในลำดับคำสั่งทั้งหมดที่มีอยู่เลือกพื้นที่รูปแบบที่จนกว่าคำสั่งเริ่มต้นรอบถัดไปหรือลาออก และ คำสั่งแก้ไขที่มีสองที่อยู่จะต้องเลือกช่วงที่ครอบคลุมจากพื้นที่รูปแบบแรกที่ตรงกับที่อยู่แรกผ่านพื้นที่รูปแบบต่อไปที่ตรงกับที่สอง [... ] เริ่มต้นที่บรรทัดแรกตามช่วงที่เลือก sed จะค้นหาที่อยู่แรกอีกครั้ง …
11 sed  posix 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.