ຮຽນຮູ້ Linux Command - execv

execl, execlp, execle, execv, execvp - execute a file

Synopsis

#include

extern char ** environ

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 [])

ລາຍລະອຽດຂອງຫນ້າທີ່ exec

ຄອບຄົວຂອງຫນ້າທີ່ exec ເຮັດວຽກແທນຮູບພາບຂະບວນການໃນປັດຈຸບັນທີ່ມີພາບຂະບວນການໃຫມ່. ຟັງຊັນທີ່ອະທິບາຍໄວ້ໃນຫນ້າຄູ່ມືນີ້ແມ່ນຫນ້າທໍາອິດສໍາລັບການເຮັດວຽກຂອງ execve (2). (ເບິ່ງຫນ້າຄູ່ມືສໍາລັບຂໍ້ມູນລະອຽດກ່ຽວກັບການທົດແທນຂະບວນການປະຈຸບັນ.)

ການໂຕ້ຖຽງເບື້ອງຕົ້ນສໍາລັບຫນ້າທີ່ເຫຼົ່ານີ້ແມ່ນເສັ້ນທາງຂອງໄຟລ໌ທີ່ຈະຖືກປະຕິບັດ.

ການ const char * arg ແລະ ellipses ຕໍ່ໄປໃນ execl , execlp ແລະ function execle ສາມາດຄິດວ່າເປັນ arg0 , arg1 , ... , argn . ຮ່ວມກັນພວກມັນຈະອະທິບາຍບັນຊີລາຍຊື່ຫນຶ່ງຫຼືຫຼາຍຈຸດຊີ້ໄປຫາສາຍທີ່ຖືກລົ້ມເຫລວທີ່ເປັນຕົວຊີ້ວັດການໂຕ້ຖຽງທີ່ມີຢູ່ໃນໂຄງການທີ່ຖືກປະຕິບັດ. ການໂຕ້ຖຽງທໍາອິດ, ໂດຍສົນທິສັນຍາ, ຄວນຊີ້ໃຫ້ເຫັນຊື່ໄຟລ໌ທີ່ກ່ຽວຂ້ອງກັບໄຟລ໌ທີ່ຖືກປະຕິບັດ. ບັນຊີລາຍຊື່ຂອງການໂຕ້ຖຽງ ຕ້ອງ ຖືກຍົກເລີກໂດຍຕົວຊີ້ NULL .

ຟັງຊັນ execv ແລະ execvp ສະແດງ array ຂອງ pointers ກັບ strings null-terminated ເຊິ່ງເປັນຕົວແທນຂອງບັນຫາການໂຕ້ຖຽງທີ່ມີຢູ່ໃນໂຄງການໃຫມ່. ການໂຕ້ຖຽງທໍາອິດ, ໂດຍສົນທິສັນຍາ, ຄວນຊີ້ໃຫ້ເຫັນຊື່ໄຟລ໌ທີ່ກ່ຽວຂ້ອງກັບໄຟລ໌ທີ່ຖືກປະຕິບັດ. array of pointers ຕ້ອງ ຖືກປິດໂດຍຕົວຊີ້ NULL .

ຟັງຊັນ execle ຍັງກໍານົດສະພາບແວດລ້ອມຂອງຂະບວນການປະຕິບັດໂດຍການປະຕິບັດຕາມຕົວຊີ້ NULL ທີ່ຢຸດຕິບັນຊີລາຍຊື່ຂອງການໂຕ້ຖຽງໃນລາຍການພາລາມິເຕີຫຼືຕົວຊີ້ໄປຫາອາເລ argv ດ້ວຍຕົວກໍານົດການເພີ່ມເຕີມ. ພາລາມິເຕີເພີ່ມເຕີມນີ້ແມ່ນອາເລຂອງຕົວຊີ້ໄປຫາຊ່ອຍແນ່ທີ່ຖືກລົ້ມເຫລວແລະ ຕ້ອງ ຖືກຍົກເລີກໂດຍຕົວຊີ້ NULL . ຟັງຊັນອື່ນໆເອົາສະພາບແວດລ້ອມສໍາລັບຮູບພາບຂະບວນການໃຫມ່ຈາກສະພາບການປ່ຽນແປງພາຍນອກໃນຂະບວນການປະຈຸບັນ.

ບາງບັນດາຫນ້າທີ່ເຫຼົ່ານີ້ມີຄວາມສໍາຄັນພິເສດ.

execlp exevp ແລະ exevp ຈະ duplicate ປະຕິບັດງານຂອງ shell ໃນການຊອກຫາໄຟລ໌ executable ຖ້າຊື່ໄຟລ໌ທີ່ລະບຸບໍ່ມີຕົວອັກສອນ slash (/). ເສັ້ນທາງຄົ້ນຫາແມ່ນເສັ້ນທາງທີ່ລະບຸໄວ້ໃນສະພາບແວດລ້ອມໂດຍຕົວແປ PATH . ຖ້າຕົວແປນີ້ບໍ່ໄດ້ລະບຸ, ເສັ້ນທາງ default ``: / bin: / usr / bin '' ແມ່ນຖືກນໍາໃຊ້. ນອກຈາກນັ້ນ, ຂໍ້ຜິດພາດບາງຢ່າງຖືກປະຕິບັດໂດຍສະເພາະ.

ຖ້າການອະນຸຍາດຖືກປະຕິເສດສໍາລັບໄຟລ໌ ( execve ທີ່ ພະຍາຍາມສົ່ງຄືນ EACCES ), ຫນ້າທີ່ເຫຼົ່ານີ້ຈະສືບຕໍ່ຊອກຫາສ່ວນທີ່ເຫຼືອຂອງເສັ້ນທາງຄົ້ນຫາ. ຢ່າງໃດກໍ່ຕາມ, ຖ້າບໍ່ພົບໄຟລ໌ອື່ນ, ພວກເຂົາຈະກັບຄືນກັບ errno ຕົວແປທົ່ວໂລກທີ່ຕັ້ງໄວ້ໃນ EACCES .

ຖ້າ header ຂອງໄຟລ໌ບໍ່ໄດ້ຮັບການຍອມຮັບ ( execve ພະຍາຍາມສົ່ງຄືນ ENOEXEC ), ຫນ້າທີ່ເຫລົ່ານີ້ຈະປະຕິບັດ shell ກັບເສັ້ນທາງຂອງໄຟລ໌ເປັນການໂຕ້ຖຽງຄັ້ງທໍາອິດ. (ຖ້າຄວາມພະຍາຍາມນີ້ລົ້ມເຫລວ, ບໍ່ມີການຊອກຫາຕື່ມອີກ).

Return Value of exec Functions

ຖ້າມີ exec functions return, ຂໍ້ຜິດພາດຈະເກີດຂຶ້ນ. ມູນຄ່າຜົນຕອບແທນແມ່ນ -1, ແລະ errno ຕົວປ່ຽນແປງທົ່ວໂລກຈະຖືກກໍານົດເພື່ອສະແດງຄວາມຜິດພາດ.