สรุป
#include
ลักษณะ
เปิด() คำสั่ง linux ของระบบเรียกใช้เพื่อแปลงชื่อพา ธ ไปเป็น descriptor ไฟล์ (ขนาดเล็กไม่ใช่จำนวนเต็มลบสำหรับใช้ในภายหลัง I / O เช่นเดียวกับ อ่าน, เขียนฯลฯ ) เมื่อการเรียกประสบความสำเร็จตัวบอกลักษณะไฟล์ที่ส่งคืน wil จะเป็น descriptor ไฟล์ต่ำสุดที่ไม่ได้เปิดอยู่สำหรับกระบวนการนี้ สายนี้สร้างไฟล์ที่เปิดใหม่ซึ่งไม่ได้ใช้ร่วมกับกระบวนการอื่นใด (แต่แชร์ไฟล์ที่เปิดอาจเกิดขึ้นผ่านทางส้อม(2) call ระบบ) descriptor ไฟล์ใหม่ถูกตั้งค่าให้ยังคงเปิดอยู่ข้าม exec functions (ดูfcntl(2)) ไฟล์ออฟเซทตั้งค่าไว้ที่จุดเริ่มต้นของไฟล์
พารามิเตอร์ ธง เป็นหนึ่งในO_RDONLY, O_WRONLY หรือO_RDWR ซึ่งขอเปิดแฟ้มอ่านอย่างเดียวเขียนอย่างเดียวหรืออ่าน / เขียนตามลำดับบิต - หรือ 'd มีศูนย์หรือมากกว่าต่อไปนี้:
O_CREAT
หากไฟล์ไม่มีอยู่ไฟล์จะถูกสร้างขึ้น เจ้าของ (ID ผู้ใช้) ของไฟล์ถูกตั้งค่าเป็น ID ผู้ใช้ที่มีประสิทธิภาพของกระบวนการ ความเป็นเจ้าของกลุ่ม (ID กลุ่ม) ถูกตั้งค่าเป็น ID กลุ่มที่มีประสิทธิภาพของกระบวนการหรือไปยัง ID กลุ่มของไดเร็กทอรีหลัก (ขึ้นอยู่กับชนิดของระบบไฟล์และตัวเลือก mount และโหมดของไดเร็กทอรีหลักดูเช่นส่วนกำหนดค่า ตัวเลือก bsdgroups และ sysvgroups ของระบบไฟล์ ext2 ตามที่อธิบายไว้ในภูเขา(8)).
O_EXCL
เมื่อใช้กับO_CREATหากไฟล์มีอยู่แล้วจะเป็นข้อผิดพลาดและเปิด จะล้มเหลว ในบริบทนี้การเชื่อมโยงแบบสัญลักษณ์มีอยู่โดยไม่คำนึงถึงจุดที่ต้องการO_EXCL เสียบนระบบไฟล์ NFS โปรแกรมที่พึ่งพามันสำหรับการปฏิบัติงานล็อคจะมีสภาพการแข่งขัน โซลูชันสำหรับการล็อกไฟล์อะตอมโดยใช้ไฟล์ล็อกคือการสร้างไฟล์ที่ไม่ซ้ำกันในไฟล์ fs เดียวกัน (เช่นการรวมชื่อโฮสต์และ pid) ใช้ลิงก์ (2) เพื่อสร้างลิงก์ไปยังไฟล์ล็อกไฟล์ ถ้าการเชื่อมโยง () ส่งกลับ 0 ล็อกจะสำเร็จ มิฉะนั้นให้ใช้ สถิติ(2) ในไฟล์ที่ไม่ซ้ำกันเพื่อตรวจสอบว่าจำนวนการเชื่อมโยงได้เพิ่มขึ้นเป็น 2 ซึ่งในกรณีนี้การล็อกยังทำได้สำเร็จ
O_NOCTTY
ถ้า ชื่อพา ธ หมายถึงอุปกรณ์ปลายทาง --- ดูTTY(4) --- มันจะไม่กลายเป็นเครื่องควบคุมของกระบวนการแม้ว่ากระบวนการนี้จะไม่มี
O_TRUNC
ถ้าไฟล์มีอยู่แล้วและเป็นไฟล์ปกติและโหมดเปิดอนุญาตให้เขียน (เช่น O_RDWR หรือ O_WRONLY) จะถูกตัดทอนให้เป็นความยาว 0 ถ้าไฟล์เป็นไฟล์ FIFO หรืออุปกรณ์ปลายทางธง O_TRUNC จะถูกละเว้น มิฉะนั้นผลของ O_TRUNC ยังไม่ระบุ (ใน Linux หลายเวอร์ชันจะไม่มีผลใด ๆ ในเวอร์ชันอื่น ๆ จะแสดงข้อผิดพลาด)
O_APPEND
ไฟล์ถูกเปิดในโหมดต่อท้าย ก่อนหน้านี้เขียนตัวชี้แฟ้มอยู่ในตำแหน่งที่ท้ายไฟล์เช่นถ้ามีlseek. O_APPEND อาจทำให้เกิดไฟล์ที่เสียหายในระบบไฟล์ NFS ถ้ามีการผนวกข้อมูลเข้ากับไฟล์มากกว่าหนึ่งรายการพร้อมกัน เนื่องจาก NFS ไม่สนับสนุนการผนวกเข้ากับไฟล์ดังนั้นเคอร์เนลของไคลเอ็นต์จะต้องจำลองข้อมูลซึ่งไม่สามารถทำได้โดยไม่มีเงื่อนไขการแย่งชิง
O_NONBLOCK หรือO_NDELAY
เมื่อเป็นไปได้ไฟล์จะถูกเปิดในโหมด non-blocking ทั้งเปิด หรือการดำเนินงานใด ๆ ที่ตามมาในตัวอธิบายไฟล์ที่ถูกส่งคืนจะทำให้กระบวนการโทรรอ สำหรับการจัดการ FIFO (ท่อที่มีชื่อ) โปรดดูที่FIFO(4) โหมดนี้ไม่จำเป็นต้องมีผลกับไฟล์อื่นนอกจาก FIFO
O_SYNC
เปิดไฟล์สำหรับ I / O แบบซิงโครนัส ใดเขียนs ใน descriptor ไฟล์ผลลัพธ์จะบล็อกกระบวนการเรียกจนกว่าจะมีการเขียนข้อมูลทางกายภาพให้กับฮาร์ดแวร์ต้นแบบ ดูข้อ จำกัด ด้านล่างนี้
O_NOFOLLOW
ถ้า ชื่อพา ธ เป็นลิงค์สัญลักษณ์แล้วเปิดไม่ นี่คือส่วนขยาย FreeBSD ซึ่งเพิ่มลงใน Linux ในเวอร์ชัน 2.1.126 การเชื่อมโยงสัญลักษณ์ในคอมโพเนนต์ก่อนหน้าของพา ธ ชื่อจะยังคงปฏิบัติตาม ส่วนหัวของ glibc 2.0.100 และภายหลังรวมถึงคำจำกัดความของธงนี้ เมล็ดก่อน 2.1.126 จะไม่สนใจถ้าใช้ .
O_DIRECTORY
ถ้า ชื่อพา ธ ไม่ใช่ไดเรกทอรีทำให้เปิดไม่สำเร็จ ธงนี้เป็น Linux เฉพาะและถูกเพิ่มลงใน kernel version 2.1.126 เพื่อหลีกเลี่ยงปัญหาการปฏิเสธการให้บริการถ้าopendir(3) เรียกว่า FIFO หรืออุปกรณ์เทป แต่ไม่ควรใช้นอกการใช้งานopendir.
O_DIRECT
พยายามลดผลกระทบจากแคชของ I / O ไปยังและจากไฟล์นี้ โดยทั่วไปจะทำให้ประสิทธิภาพลดลง แต่จะเป็นประโยชน์ในสถานการณ์พิเศษเช่นเมื่อแอปพลิเคชันทำแคชของตนเอง ไฟล์ I / O จะทำขึ้นโดยตรงกับ / จากบัฟเฟอร์พื้นที่ของผู้ใช้ I / O เป็นแบบซิงโครนัสนั่นคือเมื่อเสร็จสิ้นการ อ่าน(2) หรือเขียน(2) สายระบบข้อมูลมีการรับประกันว่าจะได้รับการโอน ขนาดการโอนย้ายและการจัดตำแหน่งของบัฟเฟอร์ของผู้ใช้และการชดเชยไฟล์ต้องทั้งหมดเป็นจำนวนมากของขนาดบล็อกตรรกะของระบบไฟล์ธงนี้ได้รับการสนับสนุนในระบบ Unix หลายแบบ สนับสนุนภายใต้ Linux ใน kernel version 2.4.10อินเทอร์เฟซที่คล้ายคลึงกันเกี่ยวกับความหมายสำหรับอุปกรณ์ป้องกันถูกอธิบายไว้ในดิบ(8). O_ASYNC สร้างสัญญาณ (SIGIO ตามค่าเริ่มต้น แต่สามารถเปลี่ยนแปลงได้ผ่านทางfcntl(2)) เมื่อ input หรือ output เป็นไปได้ใน descriptor file นี้ คุณลักษณะนี้มีให้สำหรับเทอร์มินัลเทอร์มินัลหลอกและซ็อกเก็ตเท่านั้น ดูfcntl(2) สำหรับรายละเอียดเพิ่มเติม O_LARGEFILE ในระบบ 32 บิตที่สนับสนุนระบบไฟล์ขนาดใหญ่อนุญาตให้ไฟล์ที่มีขนาดไม่สามารถแสดงใน 31 บิตที่จะเปิดขึ้น บางส่วนของธงที่ไม่จำเป็นเหล่านี้สามารถเปลี่ยนแปลงได้โดยใช้fcntl หลังจากไฟล์ถูกเปิดขึ้น อาร์กิวเมนต์ โหมด ระบุสิทธิ์ที่จะใช้ในกรณีที่ไฟล์ใหม่ถูกสร้างขึ้น มันถูกแก้ไขโดยกระบวนการของumask ในทางปกติ: สิทธิ์ของไฟล์ที่สร้างขึ้นคือ(โหมด & ~ umask). โปรดทราบว่าโหมดนี้ใช้กับการเข้าถึงไฟล์ที่สร้างขึ้นใหม่ในอนาคตเท่านั้นเปิดเรียกว่าสร้างไฟล์แบบอ่านอย่างเดียวอาจทำให้อ่าน / เขียนไฟล์อธิบายได้ดี มีการกำหนดค่าคงที่ต่อไปนี้ไว้ โหมด : S_IRWXU 00700 ผู้ใช้ (เจ้าของไฟล์) ได้อ่าน, เขียนและเรียกใช้สิทธิ์ S_IRUSR (S_IREAD) ผู้ใช้มีสิทธิ์อ่านแล้ว S_IWUSR (S_IWRITE) 00200 ผู้ใช้มีสิทธิ์เขียน S_IXUSR (S_IEXEC) ผู้ใช้ 00100 ได้รับอนุญาตให้ดำเนินการ S_IRWXG 00070 กลุ่มได้อ่านอนุญาตเขียนและดำเนินการ S_IRGRP กลุ่ม 00040 ได้รับอนุญาตอ่านแล้ว S_IWGRP กลุ่ม 00020 มีสิทธิ์ในการเขียน S_IXGRP 00010 กลุ่มได้รับอนุญาตให้ดำเนินการ S_IRWXO 00007 คนอื่น ๆ อ่าน, เขียนและดำเนินการได้รับอนุญาต S_IROTH 00004 คนอื่น ๆ ได้รับอนุญาตอ่าน S_IWOTH 00002 คนอื่น ๆ ได้รับอนุญาตให้เขียน S_IXOTH 00001 คนอื่น ๆ ได้รับอนุญาตให้ดำเนินการ โหมด ต้องระบุเมื่อO_CREAT อยู่ใน ธง และจะถูกละเว้นเป็นอย่างอื่น creat เท่ากับเปิด กับ ธง เท่ากับO_CREAT | O_WRONLY | O_TRUNC. คืนมูลค่า เปิด และcreat return descriptor ไฟล์ใหม่หรือ -1 ถ้ามีข้อผิดพลาดเกิดขึ้น (ในกรณีนี้ errno ถูกตั้งไว้อย่างเหมาะสม) โปรดทราบว่าเปิด สามารถเปิดไฟล์พิเศษของอุปกรณ์ได้ แต่creat ไม่สามารถสร้างได้ - ใช้mknod(2) แทน บนระบบไฟล์ NFS ที่มีการเปิดใช้งานการแมป UID,เปิด อาจส่งคืนคำอธิบายไฟล์ได้เช่น อ่าน(2) ถูกปฏิเสธด้วยEACCES. เนื่องจากไคลเอ็นต์ดำเนินการเปิด โดยการตรวจสอบสิทธิ์ แต่การทำแผนที่ UID จะดำเนินการโดยเซิร์ฟเวอร์เมื่อมีการอ่านและเขียนคำขอ หากไฟล์ถูกสร้างใหม่ช่วงเวลา cime, ctime, mtime จะถูกตั้งค่าเป็นเวลาปัจจุบันและฟิลด์ ctime และ mtime ของไดเร็กทอรีหลักจะเป็นเช่นนั้น มิเช่นนั้นถ้าไฟล์ได้รับการแก้ไขเนื่องจากธง O_TRUNC เขตเวลา ctime และ mtime จะถูกตั้งค่าเป็นเวลาปัจจุบัน EEXIST ชื่อพา ธ มีอยู่แล้วและO_CREAT และO_EXCL ถูกใช้. EISDIR ชื่อพา ธ หมายถึงไดเร็กตอรี่และการเข้าถึงที่ร้องขอเกี่ยวกับการเขียน (นั่นคือ,O_WRONLY หรือO_RDWR ถูกตั้งค่าไว้) EACCES ไม่อนุญาตการเข้าถึงไฟล์ที่ต้องการหรือหนึ่งในไดเรกทอรีที่มา ชื่อพา ธ ไม่อนุญาตให้ใช้สิทธิ์ในการค้นหา (รัน) หรือไฟล์ยังไม่มีอยู่และเขียนการเข้าถึงไดเรกทอรีหลักไม่ได้รับอนุญาต ENAMETOOLONG ชื่อพา ธ ยาวเกินไป ENOENT O_CREAT ไม่ได้ถูกตั้งค่าไว้และไม่มีไฟล์ที่ระบุไว้ หรือคอมโพเนนต์ไดเรกทอรีใน ชื่อพา ธ ไม่มีหรือเป็นลิงก์สัญลักษณ์แบบ dangling ENOTDIR คอมโพเนนต์ที่ใช้เป็นไดเรกทอรีใน ชื่อพา ธ ไม่ใช่ในความเป็นจริงไดเรกทอรีหรือO_DIRECTORYถูกระบุและ ชื่อพา ธ ไม่ใช่ไดเรกทอรี ENXIO O_NONBLOCK | O_WRONLY ถูกตั้งค่าไฟล์ที่มีชื่อเป็น FIFO และไม่มีกระบวนการใดที่มีไฟล์เปิดอ่านอยู่ หรือไฟล์เป็นไฟล์พิเศษของอุปกรณ์และไม่มีอุปกรณ์ที่เกี่ยวข้องอยู่ ENODEV ชื่อพา ธ หมายถึงอุปกรณ์พิเศษและไม่มีอุปกรณ์ที่เกี่ยวข้อง (นี่คือข้อผิดพลาดของเคอร์เนลใน Linux - ในสถานการณ์เช่นนี้ ENXIO ต้องถูกส่งคืน) EROFS ชื่อพา ธ หมายถึงไฟล์บนระบบแฟ้มแบบอ่านอย่างเดียวและได้รับการร้องขอการเขียน ETXTBSY ชื่อพา ธ หมายถึงภาพที่ปฏิบัติการซึ่งกำลังดำเนินการอยู่และได้รับการร้องขอการเขียน EFAULT ชื่อพา ธ จุดที่อยู่นอกพื้นที่ที่อยู่ที่สามารถเข้าถึงได้ ELOOP มีการเชื่อมโยงสัญลักษณ์มากเกินไปในการแก้ไข ชื่อพา ธ , หรือO_NOFOLLOW ถูกระบุ แต่ ชื่อพา ธ เป็นลิงค์สัญลักษณ์ ENOSPC ชื่อพา ธ ถูกสร้างขึ้น แต่อุปกรณ์ที่มี ชื่อพา ธ ไม่มีที่ว่างสำหรับไฟล์ใหม่ ENOMEM มีหน่วยความจำเคอร์เนลไม่เพียงพอ EMFILE กระบวนการมีจำนวนไฟล์ที่เปิดอยู่แล้ว ENFILE จำกัด จำนวนไฟล์ที่เปิดอยู่ในระบบแล้ว SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW และO_DIRECTORY ธงเป็น Linux เฉพาะ หนึ่งอาจจะต้องกำหนด_GNU_SOURCE แมโครเพื่อให้ได้คำจำกัดความ มีโปร่งใสมากมายที่มีพื้นฐานมาจาก NFS ซึ่งส่งผลต่อผู้อื่นO_SYNC และO_NDELAY. POSIX จัดเตรียมตัวแปร I / O ที่ซิงโครไนซ์สามแบบให้สอดคล้องกับธงO_SYNC , O_DSYNC และ O_RSYNC. ขณะนี้ (2.1.130) มีความหมายเหมือนกันทั้งหมดภายใต้ Linux ข้อผิดพลาด
สอดคล้องกับ
ข้อ จำกัด