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

execl, execlp, execle, execv, execvp - รัน ไฟล์

สรุป

#include

extern ถ่าน ** สิ่งแวดล้อม;

int execl (const char * path , const char * arg , ... );
int execlp ( ไฟล์ const char *, const char * arg , ... );
int execle (const char * เส้นทาง const char * arg , ... , char * const envp []);
int execv (const char * เส้นทาง char * const argv []);
int execvp ( ไฟล์ const char * , char * const argv []);

คำอธิบายของฟังก์ชัน exec

ตระกูล exec ของฟังก์ชันแทนที่ภาพกระบวนการปัจจุบันด้วยภาพ กระบวนการ ใหม่ ฟังก์ชันที่อธิบายไว้ในหน้าคู่มือนี้คือส่วนหน้าสำหรับฟังก์ชัน execve (2) (ดูหน้าคู่มือสำหรับ execve สำหรับข้อมูลโดยละเอียดเกี่ยวกับการเปลี่ยนกระบวนการปัจจุบัน)

อาร์กิวเมนต์เริ่มต้นสำหรับฟังก์ชันเหล่านี้คือพา ธ ของไฟล์ที่จะเรียกใช้งาน

อาร์กิวเมนต์ const char * arg และรูป วงแหวนที่ตามมาใน ฟังก์ชัน execl , execlp และ execle สามารถเป็น arg0 , arg1 , ... , argn ได้ พวกเขาร่วมกันอธิบายรายการหนึ่งหรือมากกว่าหนึ่งตัวชี้ไปยังสตริงที่สิ้นสุดด้วยโมฆะซึ่งเป็นตัวแทนของรายการอาร์กิวเมนต์ที่พร้อมใช้งานสำหรับโปรแกรมที่ดำเนินการ อาร์กิวเมนต์แรกโดยการประชุมควรชี้ไปที่ชื่อไฟล์ที่เชื่อมโยงกับไฟล์ที่กำลังดำเนินการ รายการอาร์กิวเมนต์ ต้อง ถูกยกเลิกโดยใช้ตัวชี้ NULL

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

ฟังก์ชัน execle ยังระบุสภาพแวดล้อมของกระบวนการที่ดำเนินการโดยการทำตามตัวชี้ NULL ที่จะยุติรายการอาร์กิวเมนต์ในรายการพารามิเตอร์หรือตัวชี้ไปยังอาร์เรย์ argv ด้วยพารามิเตอร์เพิ่มเติม พารามิเตอร์เพิ่มเติมนี้เป็นอาร์เรย์ของตัวชี้ไปยังสตริงที่สิ้นสุดด้วยค่า null และ ต้อง ถูกยกเลิกโดยใช้ตัวชี้ NULL ฟังก์ชันอื่น ๆ ใช้สภาพแวดล้อมสำหรับภาพกระบวนการใหม่จาก สภาพแวดล้อม ตัวแปรภายนอกในกระบวนการปัจจุบัน

บางส่วนของฟังก์ชันเหล่านี้มีความหมายพิเศษ

ฟังก์ชัน execlp และ execvp จะทำซ้ำการกระทำของเชลล์ในการค้นหาไฟล์ที่ปฏิบัติการได้ถ้าชื่อไฟล์ที่ระบุไม่ประกอบด้วยเครื่องหมายทับ (/) พา ธ การค้นหาคือพา ธ ที่ระบุในสภาวะแวดล้อมโดยตัวแปร PATH หากไม่ได้ระบุตัวแปรนี้จะใช้เส้นทางเริ่มต้น ``: / bin: / usr / bin '' นอกจากนี้ข้อผิดพลาดบางอย่างยังถือว่าเป็นพิเศษ

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

ถ้าไม่รู้จักส่วนหัวของไฟล์ ( execve ที่ พยายามส่งกลับ ENOEXEC ) ฟังก์ชันเหล่านี้จะเรียกใช้เชลล์ด้วยเส้นทางของไฟล์เป็นอาร์กิวเมนต์แรก (ถ้าความพยายามนี้ล้มเหลวไม่มีการค้นหาเพิ่มเติม)

ค่าส่งกลับของฟังก์ชัน exec

ถ้าฟังก์ชัน exec ใด ๆ ส่งกลับค่าข้อผิดพลาดจะเกิดขึ้น ค่าที่ส่งกลับคือ -1 และตัวแปร errno global จะถูกตั้งค่าเพื่อระบุข้อผิดพลาด