ဟာ Linux စစ်ဌာနချုပ် Learn - execl

အမည်: 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);

ဖေါ်ပြချက်

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

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