วิธีใช้ Open System Call ใน C

How Use Open System Call C



การเรียกของระบบถูกใช้ในลีนุกซ์รุ่นต่างๆ เพื่อจัดเตรียมทางเข้าออกภายในระบบปฏิบัติการลีนุกซ์และโปรแกรมต่างๆ ระบบปฏิบัติการ Linux ใช้ไลบรารี Glibc เพื่อรองรับการเรียกระบบในขณะที่ใช้ภาษา C มีหลายวิธีในการใช้การโทรของระบบเช่นกัน ในคู่มือบทความนี้ เราจะพูดถึงการเรียกระบบเปิดในระบบ Linux มีการใช้การเรียกระบบเปิดเพื่อเปิดไฟล์ที่ระบุในเส้นทางอย่างรวดเร็ว มันแจ้งให้เราทราบเกี่ยวกับตัวอธิบายไฟล์ของไฟล์ที่ผู้ใช้สร้างขึ้น เราใช้ Ubuntu 20.04 เพื่อรับสายระบบเปิด

ติดตั้งไลบรารี

ภาษา C จำเป็นต้องติดตั้งแพ็คเกจไลบรารีเพิ่มเติมเป็นข้อกำหนดเบื้องต้น ก่อนอื่น คุณต้องติดตั้งแพ็คเกจ manpages-dev เพื่อตรวจสอบข้อมูลเกี่ยวกับการเรียกระบบ เปิดเทอร์มินัลบรรทัดคำสั่งจากพื้นที่กิจกรรมและดำเนินการตามคำแนะนำด้านล่างเพื่อติดตั้ง manpages







$ sudo apt ติดตั้ง manpages-dev



ผลลัพธ์สำหรับการติดตั้งให้เสร็จสมบูรณ์ได้รับด้านล่าง







ตอนนี้เราจะตรวจสอบการเรียกระบบเปิดโดยใช้คำสั่ง man ดังต่อไปนี้

$ man2เปิด



หน้าคู่มือเอาต์พุตสำหรับการเรียกระบบเปิดแสดงไว้ด้านล่าง คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ กดปุ่ม q เพื่อออกจาก

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

ตอนนี้ได้เวลาติดตั้งคอมไพเลอร์ GCC สำหรับการดีบักโค้ด C ในการแจกจ่าย Ubuntu 20.04 Linux เพื่อดำเนินการตามคำสั่งด้านล่างในเชลล์เพื่อดำเนินการดังกล่าว

$ sudo apt ติดตั้ง gcc

คุณต้องแตะ Y เพื่อติดตั้งคอมไพเลอร์ GCC ต่อไป ไม่เช่นนั้นให้กดปุ่ม n เพื่อปิดการติดตั้ง กดปุ่ม y แล้วกด Enter เพื่อดำเนินการต่อ

ผลลัพธ์สำหรับการเสร็จสิ้นแสดงอยู่ด้านล่าง

ตัวอย่าง 01

มาดูตัวอย่างง่ายๆ ของการเรียกระบบแบบเปิด ขั้นแรก ให้เปิด command shell และสร้างไฟล์ข้อความใหม่ test.txt โดยใช้คำสั่ง touch อย่างง่ายดังนี้:

$สัมผัสtest.txt

เพิ่มข้อมูลบางส่วนด้วยตนเอง คุณสามารถดูข้อมูลในไฟล์โดยใช้คำสั่ง cat ด้านล่าง

$แมวtest.txt

ตอนนี้มาสร้างไฟล์ C ใหม่โดยใช้คำสั่ง nano ในเชลล์ดังที่แสดงด้านล่าง

$นาโนnew.c

ไฟล์ GNU nano ด้านล่างจะเปิดขึ้น คุณต้องพิมพ์รหัสภาษา C ด้านล่างลงไป คุณจะเห็นว่าเราได้เพิ่มแพ็คเกจไลบรารีที่จำเป็นสำหรับโค้ด C เพื่อให้ทำงานได้อย่างถูกต้อง หลังจากนั้น เราได้กำหนดฟังก์ชันหลักเพื่อทำงานบนการเรียกระบบเปิด เราได้ประกาศตัวแปรจำนวนเต็มสองตัว ตัวแปร n ใช้เพื่อนับค่าบัฟเฟอร์ และ fd ใช้สำหรับ file descriptor เราได้ประกาศอาร์เรย์บัฟเฟอร์ประเภทอักขระเป็น buf ที่มีขนาด 50 การเรียกระบบเปิดถูกใช้เพื่ออ่านเนื้อหาจากไฟล์ test.txt และส่งคืนไปยัง file descriptor O_RDONLY ถูกใช้เพื่อจุดประสงค์ในการอ่าน บรรทัดถัดไปแสดงการเรียกระบบการอ่านเพื่อรวบรวม 10 ไบต์จากบัฟเฟอร์และส่งคืนเป็นจำนวนเต็ม n นอกจากนี้ ยังใช้คำสั่ง write เพื่อเขียนเนื้อหาหรือข้อมูลบัฟเฟอร์ลงใน file descriptor ซึ่งเป็นหน้าจอเอาท์พุต ในกรณีของเราตอนนี้ บันทึกไฟล์นี้โดยใช้ Ctrl+S และปิดโดยใช้คำสั่ง Ctrl+X

#รวม
#รวม
#รวม
#รวม

intหลัก()
{
intNS,fd;
charบัฟ[ห้าสิบ];
fd=เปิด(ทดสอบ.txt,O_RDONLY);
NS=อ่าน(fd,บัฟ, 10);
เขียน(1 ,บัฟ, 10);

เรามาคอมไพล์โค้ด C ก่อนสำหรับการเรียกระบบเปิดโดยใช้คำสั่ง gcc ด้านล่าง

$gccnew.c

ตอนนี้ได้เวลาตรวจสอบเอาต์พุตสำหรับรหัส C สำหรับการเรียกระบบแบบเปิด ลองใช้คำสั่ง a.out ด้านล่างในเชลล์ ผลลัพธ์จะแสดง 10 ไบต์จากเนื้อหาของไฟล์ test.txt

$./ถึง.ออก

มาดูตัวอย่างอื่นในการเขียนเนื้อหาของไฟล์หนึ่งไปยังอีกไฟล์หนึ่งโดยใช้การเรียกระบบเปิด เพื่อสร้างไฟล์ C ใหม่โดยใช้คำสั่ง nano ดังต่อไปนี้

$ นาโนใหม่

ดังนั้นให้ใช้รหัสเดียวกันกับการเปลี่ยนแปลงเล็กน้อยในนั้น เราได้กำหนด file descriptor อื่นในโค้ดเป็น fd1 รหัสทั้งหมดเหมือนกันยกเว้นบรรทัดเพิ่มเติมหนึ่งบรรทัด บรรทัดสุดท้ายที่สองของโค้ดใช้การเรียกระบบเปิดเพื่อสร้างไฟล์ใหม่ชื่อ target โดยใช้ O_CREAT และโหมดเขียนอย่างเดียวเป็น O_WRONLY 0642 แสดงสิทธิ์ที่กำหนดให้กับไฟล์นี้ และไฟล์ถูกส่งคืนไปยัง file descriptor ใหม่ บรรทัดถัดไปแสดงคำสั่งให้เขียนไบต์ของเนื้อหาในบัฟเฟอร์ตาม file descriptor บันทึกไฟล์และปิด

ดำเนินการคำสั่งคอมไพล์ gcc เพื่อดีบักไฟล์ภาษา C

$ gcc ใหม่

หากต้องการแสดงผลลัพธ์ของโค้ด C ให้ลองใช้คำสั่ง a.out ในเชลล์ดังต่อไปนี้ ไม่มีเอาต์พุตเนื่องจากเอาต์พุตถูกเปลี่ยนเส้นทางไปยังเป้าหมายไฟล์ที่สร้างขึ้นใหม่

$./ถึง.ออก

มาตรวจสอบข้อมูลของไฟล์เป้าหมายโดยใช้คำสั่ง cat ผลลัพธ์แสดงว่าไฟล์มี 20 ไบต์ในนั้น

$ เป้าหมายแมว

บทสรุป

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