Linux / Unix စစ်ဌာနချုပ်: execvp

အမည်

execl, execlp, execle, execv, execvp - ဖိုင်တစ်ဖိုင် execute

အနှစ်ချုပ်

#include

ပြင်ပ char ** ပတ်ဝန်းကျင်;

int execl (const char * လမ်းကြောင်းကို, 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);

အဆိုပါစစ်ဌာနချုပ်၏ခြုံငုံသုံးသပ်ချက်

၏အမှုဆောင်အရာရှိမိသားစု လုပ်ဆောင်ချက်များကို မှဖြစ်စဉ်သစ်တခုပုံရိပ်နှင့်အတူလက်ရှိဖြစ်စဉ်ကိုပုံရိပ်ကိုအစားထိုးထားသည်။ ဒီနေရာမှာဖော်ပြထားတဲ့ functions တွေ function ကို execve (2) အတွက် Front-ကြီးစွန်းဖြစ်ကြသည်။

ဒီလုပ်ဆောင်ချက်တွေကိုများအတွက်ကနဦးအငြင်းအခုံကွပ်မျက်ခံရခံရဖို့ဖြစ်သည့်ဖိုင်တစ်ဖိုင်ရဲ့လမ်းကြောင်းအမည်ကိုဖြစ်ပါတယ်။

အဆိုပါ execl, execlp နှင့် execle လုပ်ဆောင်ချက်များကိုအတွက် const char * arg နှင့်နောက်ဆက်တွဲဘဲဥပုံ, arg0, arg1 အဖြစ်ယူဆနိုင်ပါတယ် ... argn ။ အတူတူသူတို့ကကွပ်မျက်ခံရပရိုဂရမ်ရရှိနိုင်တဲ့အငြင်းအခုံစာရင်းကိုယ်စားပြုကြောင်းတရားမဝင်သော-ရပ်စဲညှို့မှတဦးတည်းသို့မဟုတ်ထိုထက်ပိုထောက်ပြများစာရင်းကိုဖော်ပြရန်။ ပထမဦးဆုံးအငြင်းခုံ, စည်းဝေးကြီးတစ်ခုကိုအသုံးပြုပုံအဆိုပါထောက်ပြသင့်ပါတယ် ဖိုင် name ကို ကွပ်မျက်ခံရဖိုင်ကိုနှင့်ဆက်နွယ်။ ငြင်းခုံခြင်း၏စာရင်းတစ်ခု null pointer အားဖြင့်ရပ်စဲထားရပါမည်။

အဆိုပါ execv နှင့် execvp လုပ်ဆောင်ချက်များကိုသစ်ကိုအစီအစဉ်မရရှိနိုင်သည့်အငြင်းအခုံစာရင်းကိုယ်စားပြုကြောင်းတရားမဝင်သော-ရပ်စဲညှို့မှထောက်ပြတစ်ခုခင်းကျင်းသည်။ ပထမဦးဆုံးအငြင်းခုံ, စည်းဝေးကြီးတစ်ခုကိုအသုံးပြုပုံကွပ်မျက်ခံရခံရဖိုင်ကိုနှင့်ဆက်စပ်ဖိုင်အမည်ကိုထောက်ပြသင့်ပါတယ်။ ထောက်ပြ၏ခင်းကျင်းတစ် null pointer အားဖြင့်ရပ်စဲထားရပါမည်။

အဆိုပါ execle function ကိုလည်းတစ်ဦးအပိုဆောင်း parameter သည်နှင့်အတူ argv ခင်းကျင်းဖို့ parameter သည်စာရင်းသို့မဟုတ် pointer အတွက်အငြင်းပွားမှုများများ၏စာရင်းအဆုံးသတ်သော null pointer ကိုလိုက်နာခြင်းဖြင့်ကွပ်မျက်ခံရလုပ်ငန်းစဉ်၏ပတ်ဝန်းကျင်သတ်မှတ်ပါတယ်။ ဒါကအပိုဆောင်း parameter သည်တရားမဝင်သော-ရပ်စဲညှို့မှထောက်ပြတစ်ခုခင်းကျင်းသည်နှင့်တစ်ဦး null pointer အားဖြင့်ရပ်စဲထားရပါမည်။ အခြားလုပ်ငန်းဆောင်တာကလက်ရှိလုပ်ငန်းစဉ်များတွင်ပြင်ပ variable ကိုပတ်ဝန်းကျင်ကနေမှဖြစ်စဉ်သစ်ပုံရိပ်များအတွက်ပတ်ဝန်းကျင်ယူပါ။

ဒီလုပ်ဆောင်ချက်တွေကိုအချို့မှာအထူး semantic ရှိသည်။

သတ်မှတ်ထားသောဖိုင် name ကိုတစ်မျဉ်းစောင်း (/) အကျင့်စာရိတ္တမဆံ့မပါဘူးဆိုရင်ဒီ functions တွေ execlp နှင့် execvp တစ်ခုဟာ executable file ကိုရှာဖွေနေအတွက် shell ကို၏လုပ်ရပ်များပွားပါလိမ့်မယ်။ ရှာဖွေရေးလမ်း PATH variable ကိုအားဖြင့်ပတ်ဝန်းကျင်တွင်သတ်မှတ်ထားသောလမ်းကြောင်းဖြစ်ပါတယ်။ ဒီ variable ကိုမသတ်မှတ်ရသေးပါလျှင်, default ဖိုင်လမ်းကြောင်းကို ``: / ဘင်: / usr / bin '' ကိုအသုံးပြုသည်။ ထို့အပြင်အချို့သောအမှားများကိုအထူးကုသနေကြသည်။

ခွင့်ပြုချက်တခုအဘို့ငြင်းပယ်လျှင် ဖိုင် (ထိုကြိုးစားခဲ့ execve EACCES ပြန်လာသော) ဤလုပ်ဆောင်ချက်များကိုရှာဖွေရေးလမ်းကြောင်းကို၏ကျန် searching ဆက်လက်ပါလိမ့်မယ်။ အဘယ်သူမျှမကအခြားဖိုင်ကိုတွေ့လျှင်, သို့သော်, သူတို့ EACCES ဟုသတ်မှတ်ကမ္ဘာလုံးဆိုင်ရာ variable ကို errno နှင့်အတူပြန်လာပါလိမ့်မယ်။

အဆိုပါ အကယ်. ဖိုင်တစ်ဖိုင်၏ header ကိုအသိအမှတ်ပြုမထားဘူး (အကြိုးစားခဲ့ execve ENOEXEC ပြန်လာသော) ဤလုပ်ဆောင်ချက်များကို၎င်း၏ပထမဆုံးအငြင်းအခုံအဖြစ်ဖိုင်ရဲ့လမ်းကြောင်းကိုအတူ shell ကိုစီရင်မည်။ (ဒီကြိုးပမ်းမှုပျက်ကွက်ခဲ့လျှင်အဘယ်သူမျှမကနောက်ထပ်ရှာဖွေပြုသောအမှုဖြစ်ပါတယ်။ )

သို့ပြန်သွားသည် Value ကို

အဆိုပါအမှုဆောင်အရာရှိလုပ်ဆောင်ချက်များကိုပြန်မဆိုလြှငျ, မှားယွင်းမှုတစ်ခုဖြစ်ပွားခဲ့သည်ကြပါလိမ့်မယ်။ အဆိုပါပြန်လာတန်ဖိုးကို -1 ဖြစ်ပြီး, ကမ္ဘာလုံးဆိုင်ရာ variable ကို errno အမှားညွှန်ပြရန်သတ်မှတ်ထားပါလိမ့်မည်။

အရေးကြီး: command တစ်ခုကိုသင်၏အထူးသဖြင့်ကွန်ပျူတာပေါ်တွင်အသုံးပြုသည်ကိုမည်သို့ကြည့်ဖို့လူကို command ကို (% သည်လူ) ကိုသုံးပါ။