Линуксийн командыг ажиллуулаарай

Нэр: execl, execlp, execle, execv, execvp - файлыг гүйцэтгэх

Ерөнхий агуулга

#include

extern char ** environment;

int execl (const char * path , const char * arg , ...);
int execlp (const char * file , const char * arg , ...);
int execle (const char * path , const char * arg , ..., char * const envp []);
int execv (const char * path , char * const argv []);
int execvp (const char * file , char * const argv []);

Тодорхойлолт

Функцүүдийн гүйцэтгэх гэр бүл нь одоогийн процессийн дүрсийг шинэ процессийн дүрсээр солих болно. Гарын авлагын хуудсанд тайлбарласан функцууд нь гүйцэтгэх үүрэгтэй (2) -д зориулсан функцүүд юм. Эдгээр функцүүдийн эхний аргумент нь гүйцэтгэгдэх ёстой файлын замын нэр юм.

Execlp , болон execle функцууд дахь const char * arg ба дараачийн эллипсүүд нь arg0 , arg1 , ..., argn гэж тооцогддог . Хамтдаа тэд нэгтгэсэн хөтөлбөрт боломжтой нэмэлт өгөгдлүүдийг харуулсан null-terminated мөрүүдэд нэг буюу хэд хэдэн заагч жагсаалтыг хамт тайлбарлана. Эхний аргумент нь конвенцоор гүйцэтгэгдэж байгаа файлтай холбоотой файлын нэрийг зааж өгөх ёстой. Аргументуудын жагсаалтыг NULL заагчийн тусламжтайгаар цуцална.

Execvp болон execvp функцууд нь шинэ програмд ​​ашиглах нэмэлт өгөгдлүүдийг харуулсан null-terminated мөрүүдийг массивуудаар хангадаг. Эхний аргумент нь конвенцоор гүйцэтгэгдэж байгаа файлтай холбоотой файлын нэрийг зааж өгөх ёстой. Чиглэгчийн массив нь NULL заагчаар дуусгавар болно.

Гүйцэтгэх функц нь параметрийн жагсаалтын аргументын жагсаалт эсвэл заагчийг argv массивын нэмэлт параметртэй цуг NULL заагчийг дагаж гүйцэтгэсэн процессын орчинг тодорхойлно. Энэ нэмэлт параметр нь null-terminated мөрүүдийг заах массивууд бөгөөд NULL заагчийн тусламжтайгаар цуцлагдана. Бусад үйлдэл нь одоогийн үйл явц дахь гадаад хувьсагч орчноос шинэ процессийг дүрсэлсэн орчинг авдаг.

Эдгээр функцүүдийн зарим нь тусгай семантиксуудтай байдаг.

Заагдсан файлын нэр slash (/) тэмдэгт агуулаагүй бол execlp болон execvp нь гүйцэтгэгдэх боломжтой файлыг хайж олоход хуулбарласан үйлдлүүдийг хуулбарлах болно. Хайлтын зам нь хүрээллээр PATH хувьсагчаар тодорхойлогдсон зам юм. Хэрэв энэ хувьсагч тодорхойлогдоогүй бол `` / / bin: / usr / bin '' анхдагч замыг ашигладаг. Үүнээс гадна зарим алдааг тусгайлан авч үздэг.

Хэрэв зөвшөөрөл өгөхөөс татгалзвал файлыг ( EACCES буцаж хариу нэхэмжилсэн оролдлого хийсэн бол ) эдгээр функцууд хайлтын зам үлдсэн хэсгийг үргэлжлүүлэн хайсаар байх болно. Хэрэв ямар ч файл олдоогүй бол тэдгээр нь EACCES-д шилжих global хувьсагчаар буцах болно.

Хэрэв файлын толгой танигдахгүй ( ENOEXEC-г буцааж гүйцэтгэх оролдлого хийсэн бол) эдгээр функц нь бүрхүүлийг эхний аргумент байдлаар файлын замаар гүйцэтгэх болно. (Хэрэв энэ оролдлого амжилтгүй болбол цаашид хайж олохгүй.)

Буцах утга

Хэрэв гүйцэтгэгчийн аль нэг функц буцаж байвал алдаа гарна. Буцах утга нь -1, тэгээд дэлхийн хувьсагч алдааг зааж өгнө.