เรียนรู้คำสั่ง Linux Command

สรุป

#include href = "ไฟล์: /usr/include/sys/types.h"> sys / types.h> # include HREF = "ไฟล์: /usr/include/sys/stat.h"> sys / stat.h> # include << HREF = "file: /usr/include/fcntl.h"> fcntl.h> int เปิด (const char * pathname , int flags ); int เปิด (const char * ชื่อพา ธ , int flags , mode_t mode ); int creat (const char * พา ธ ชื่อ โหมด mode_t );

ลักษณะ

คำสั่ง linux open system () เรียกใช้เพื่อแปลงพา ธ ไปเป็น descriptor ไฟล์ (small, non-negative integer สำหรับใช้ใน I / O ตามมาเหมือนกับ อ่าน , เขียน , ฯลฯ ) เมื่อการเรียกประสบความสำเร็จตัวบอกลักษณะ ไฟล์ที่ ส่งคืน wil จะเป็น descriptor ไฟล์ต่ำสุดที่ไม่ได้เปิดอยู่สำหรับกระบวนการนี้ สายนี้สร้างไฟล์ที่เปิดใหม่ซึ่งไม่ได้ใช้ร่วมกับกระบวนการอื่นใด (แต่ไฟล์ที่เปิดใช้ร่วมกันอาจเกิดขึ้นทางสายระบบ fork (2)) descriptor ไฟล์ใหม่ถูกตั้งค่าให้คงอยู่ในฟังก์ชัน exec (ดู fcntl (2)) ไฟล์ออฟเซทตั้งค่าไว้ที่จุดเริ่มต้นของไฟล์

ธง พารามิเตอร์เป็นหนึ่งใน O_RDONLY , O_WRONLY หรือ O_RDWR ซึ่งขอเปิดไฟล์แบบอ่านอย่างเดียวเขียนอย่างเดียวหรืออ่าน / เขียนตามลำดับบิต - หรือ 'd ที่มีศูนย์หรือมากกว่าต่อไปนี้:

O_CREAT

หากไฟล์ไม่มีอยู่ไฟล์จะถูกสร้างขึ้น เจ้าของ (ID ผู้ใช้) ของไฟล์ถูกตั้งค่าเป็น ID ผู้ใช้ที่มีประสิทธิภาพของกระบวนการ ความเป็นเจ้าของกลุ่ม (ID กลุ่ม) ถูกตั้งค่าเป็น ID กลุ่มที่มีประสิทธิภาพของกระบวนการหรือไปยัง ID กลุ่มของไดเร็กทอรีหลัก (ขึ้นอยู่กับชนิดของระบบไฟล์และตัวเลือก mount และโหมดของไดเร็กทอรีหลักดูเช่นส่วนกำหนดค่า bsdgroups และ sysvgroups ตัวเลือกของระบบไฟล์ ext2 ตามที่อธิบายไว้ใน mount (8))

O_EXCL

เมื่อใช้กับ O_CREAT ถ้าไฟล์มีอยู่แล้วจะมีข้อผิดพลาดและการ เปิด จะล้มเหลว ในบริบทนี้การเชื่อมโยงแบบสัญลักษณ์มีอยู่โดยไม่คำนึงถึงจุดที่ต้องการ O_EXCL เสียใน ระบบไฟล์ NFS โปรแกรมที่พึ่งพามันสำหรับการปฏิบัติงานล็อคจะมีสภาพการแข่งขัน วิธีแก้ปัญหาสำหรับการล็อคไฟล์อะตอมโดยใช้ไฟล์ lockfile คือการสร้างไฟล์ที่ไม่ซ้ำกันในไฟล์ fs เดียวกัน (เช่นการใช้ชื่อโฮสต์และ pid) ให้ใช้ ลิงค์ (2) เพื่อสร้างลิงค์ไปยังล็อกไฟล์ ถ้า link () ส่งคืน 0 lock จะสำเร็จ มิฉะนั้นให้ใช้ stat (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 การ เปิด หรือการดำเนินงานต่อ ๆ ไปในตัวอธิบายไฟล์ที่ถูกส่งคืนจะทำให้กระบวนการโทรไม่ต้องรอ สำหรับการจัดการ FIFOs (pipes named) โปรดดูที่ FIFO (4) โหมดนี้ไม่จำเป็นต้องมีผลกับไฟล์อื่นนอกจาก FIFO

O_SYNC

เปิดไฟล์สำหรับ I / O แบบซิงโครนัส การ เขียน ใด ๆ ในตัวอธิบายไฟล์ที่เป็นผลลัพธ์จะทำให้กระบวนการเรียกไม่ได้จนกว่าข้อมูลจะถูกเขียนลงบนฮาร์ดแวร์ ดูข้อ จำกัด ด้านล่างนี้

O_NOFOLLOW

หาก ชื่อพา ธ คือการเชื่อมโยงแบบสัญลักษณ์จากนั้นการเปิดจะล้มเหลว นี่คือส่วนขยาย FreeBSD ซึ่งเพิ่มลงใน Linux ในเวอร์ชัน 2.1.126 การเชื่อมโยงสัญลักษณ์ในคอมโพเนนต์ก่อนหน้าของพา ธ ชื่อจะยังคงปฏิบัติตาม ส่วนหัวของ glibc 2.0.100 และภายหลังรวมถึงคำจำกัดความของธงนี้ เมล็ดก่อน 2.1.126 จะไม่สนใจถ้าใช้

O_DIRECTORY

ถ้า ชื่อพา ธ ไม่ได้เป็นไดเร็กทอรีทำให้เปิดไม่สำเร็จ แฟล็กนี้มีเฉพาะลีนุกซ์และถูกเพิ่มลงใน 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)) เมื่ออินพุตหรือเอาต์พุตเป็นไปได้ใน descriptor ไฟล์นี้ คุณลักษณะนี้มีให้สำหรับเทอร์มินัลเทอร์มินัลหลอกและซ็อกเก็ตเท่านั้น ดู 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 ส่งคำอธิบายไฟล์ใหม่หรือ -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

pathname หมายถึงไดเรกทอรีและการเข้าถึงที่ร้องขอเกี่ยวกับการเขียน (นั่นคือ O_WRONLY หรือ O_RDWR ถูกตั้งค่าไว้)

EACCES

ไม่อนุญาตการเข้าถึงไฟล์ที่ต้องการหรือหนึ่งในไดเร็กทอรีใน พา ธ ชื่อ ไม่อนุญาตให้ใช้สิทธิ์ในการค้นหา (รัน) หรือไฟล์ยังไม่มีอยู่และไม่อนุญาตให้เขียนการเข้าถึงไดเรกทอรีหลัก

ENAMETOOLONG

ชื่อพา ธ ยาวเกินไป

ENOENT

O_CREAT ไม่ได้ถูกตั้งค่าและไม่มีไฟล์ที่มีชื่ออยู่ หรือไม่มีส่วนประกอบไดเรกทอรีใน ชื่อพา ธ ที่ มีอยู่หรือเป็นลิงก์สัญลักษณ์แบบ dangling

ENOTDIR

คอมโพเนนต์ที่ใช้เป็นไดเรกทอรีใน ชื่อพา ธ ไม่ได้เป็นจริงไดเรกทอรีหรือ O_DIRECTORY ถูกระบุและ pathname ไม่ใช่ไดเร็กทอรี

ENXIO

O_NONBLOCK | O_WRONLY ถูกตั้งค่าไฟล์ที่มีชื่อเป็น FIFO และไม่มีกระบวนการใดที่มีไฟล์เปิดอ่านอยู่ หรือไฟล์เป็นไฟล์พิเศษของอุปกรณ์และไม่มีอุปกรณ์ที่เกี่ยวข้องอยู่

ENODEV

pathname หมายถึงอุปกรณ์พิเศษและไม่มีอุปกรณ์ที่เกี่ยวข้อง (นี่คือข้อผิดพลาดของเคอร์เนลใน Linux - ในสถานการณ์เช่นนี้ ENXIO ต้องถูกส่งคืน)

EROFS

pathname หมายถึงไฟล์บนระบบแฟ้มแบบอ่านอย่างเดียวและได้รับการร้องขอการเขียน

ETXTBSY

pathname หมายถึงภาพที่ปฏิบัติการซึ่งกำลังถูกเรียกใช้และได้รับการร้องขอการเขียน

EFAULT

จุด ชื่อเส้นทาง อยู่นอกพื้นที่ที่อยู่ที่สามารถเข้าถึงได้

ELOOP

มีการเชื่อมโยงสัญลักษณ์มากเกินไปในการแก้ปัญหา ชื่อพา ธ หรือระบุ O_NOFOLLOW แต่ ชื่อพา ธ เป็นลิงค์สัญลักษณ์

ENOSPC

pathname ถูกสร้างขึ้น แต่อุปกรณ์ที่มี pathname ไม่มีที่ว่างสำหรับไฟล์ใหม่

ENOMEM

มีหน่วยความจำเคอร์เนลไม่เพียงพอ

EMFILE

กระบวนการมีจำนวนไฟล์ที่เปิดอยู่แล้ว

ENFILE

จำกัด จำนวนไฟล์ที่เปิดอยู่ในระบบแล้ว

สอดคล้องกับ

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 ธง O_NOFOLLOW และ O_DIRECTORY เป็นแบบเฉพาะของ Linux หนึ่งอาจจะต้องกำหนดมาโคร _GNU_SOURCE เพื่อดูข้อกำหนดของพวกเขา

ข้อ จำกัด

มีโปร่งใสมากมายที่มีอยู่ในโปรโตคอลพื้นฐาน NFS ส่งผลต่อหมู่ผู้อื่น O_SYNC และ O_NDELAY

POSIX จัดเตรียมตัวแปร I / O ที่ซิงโครไนซ์สามแบบให้สอดคล้องกับค่าสถานะ O_SYNC , O_DSYNC และ O_RSYNC ขณะนี้ (2.1.130) มีความหมายเหมือนกันทั้งหมดภายใต้ Linux