சி இல் எக்ஸெக் சிஸ்டம் கால்

Exec System Call C



Exec குடும்பம் C. இல் பல செயல்பாடுகளைக் கொண்டுள்ளது. இந்த C செயல்பாடுகள் அடிப்படையில் கணினி கட்டளையை ஒரு தனி செயல்முறையில் இயக்கப் பயன்படுகிறது, அவை முக்கிய நிரல் மற்றும் வெளியீட்டை அச்சிடுகின்றன.

இந்த கட்டுரையில், நான் செயல்பாட்டுக் குடும்பத்தின் செயல்பாடுகளைப் பற்றி பேசப் போகிறேன், மேலும் இந்த ஒவ்வொரு குடும்பக் குடும்பச் செயல்பாட்டையும் எப்படி சி இல் பயன்படுத்த வேண்டும் என்பதைக் காண்பிக்கிறேன்.







எக்ஸிக் குடும்பத்தில் சி சிஸ்டம் செயல்பாடுகள்:

தலைவரின் செயல்பாட்டு குடும்பங்கள் வரையறுக்கப்பட்டுள்ளன unistd.h . எனவே, இந்த செயல்பாடுகளை நீங்கள் பயன்படுத்த விரும்பும் C நிரலில் இந்த தலைப்பை நீங்கள் பயன்படுத்த வேண்டும்.



கிடைக்கும் செயல்பாட்டு செயல்பாடுகள் மற்றும் அவற்றின் செயல்பாட்டு அளவுருக்கள் கீழே கொடுக்கப்பட்டுள்ளன:



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

இந்த செயல்பாடுகள் ஒவ்வொன்றும் என்ன செய்கிறது மற்றும் அவற்றை எவ்வாறு பயன்படுத்துவது என்று பார்ப்போம்.





execl () கணினி செயல்பாடு:

Execl () இல் கணினி செயல்பாடு இயங்கக்கூடிய பைனரி கோப்பின் பாதையை எடுக்கும் (அதாவது. / பின் / எல்எஸ் ) முதல் மற்றும் இரண்டாவது வாதம். பின்னர், வாதங்கள் (அதாவது. -lh , /வீடு ) நீங்கள் அதைத் தொடர்ந்து இயங்கக்கூடியவருக்கு அனுப்ப விரும்புகிறீர்கள் ஏதுமில்லை . பின்னர் execl () கணினி செயல்பாடு கட்டளையை இயக்குகிறது மற்றும் வெளியீட்டை அச்சிடுகிறது. ஏதேனும் பிழை ஏற்பட்டால், execl () -1 ஐ அளிக்கிறது. இல்லையெனில், அது எதையும் திருப்பித் தராது.

தொடரியல்:

intexecl(கான்ஸ்ட் கரி *பாதை, கான்ஸ்ட் கரி *கோபம்,...,ஏதுமில்லை);

Execl () கணினி செயல்பாட்டின் எடுத்துக்காட்டு கீழே கொடுக்கப்பட்டுள்ளது:



#சேர்க்கிறது

intமுக்கிய(வெற்றிடம்) {
கரி *பைனரி பாதை= ' / பின் / எல்எஸ்';
கரி *arg1= '-lh';
கரி *arg2= '/வீடு';

execl(பைனரி பாதை,பைனரி பாதை,arg1,arg2,ஏதுமில்லை);

திரும்ப 0;
}

நான் ஓடினேன் ls -lh / வீடு execl () கணினி செயல்பாட்டைப் பயன்படுத்தி கட்டளை. நீங்கள் பார்க்க முடியும் என, சரியான முடிவு காட்டப்படும்.

execlp () கணினி செயல்பாடு:

execl () பயன்படுத்துவதில்லை பாத் சுற்றுச்சூழல் மாறி. எனவே, execl () உடன் இயக்க இயங்கக்கூடிய கோப்பின் முழு பாதை தேவைப்படுகிறது. execlp () PATH சூழல் மாறியைப் பயன்படுத்துகிறது. எனவே, PATH இல் இயங்கக்கூடிய கோப்பு அல்லது கட்டளை இருந்தால், அதை இயக்க கட்டளை அல்லது கோப்பு பெயர் போதுமானது, முழு பாதை தேவையில்லை.

தொடரியல்:

intexeclp(கான்ஸ்ட் கரி *கோப்பு, கான்ஸ்ட் கரி *கோபம்,...,ஏதுமில்லை);

Execlp () கணினி செயல்பாட்டைப் பயன்படுத்தி நாம் execl () உதாரணத்தை பின்வருமாறு மீண்டும் எழுதலாம்:

#சேர்க்கிறது

intமுக்கிய(வெற்றிடம்) {
கரி *நிரல் பெயர்= 'ls';
கரி *arg1= '-lh';
கரி *arg2= '/வீடு';

execlp(நிரல் பெயர்,நிரல் பெயர்,arg1,arg2,ஏதுமில்லை);

திரும்ப 0;
}

நான் கட்டளை பெயரை மட்டுமே கடந்துவிட்டேன் ls , முழு பாதை அல்ல / பின் / எல்எஸ் . நீங்கள் பார்க்கிறபடி, எனக்கு முன்பு இருந்த அதே வெளியீடு கிடைத்தது.

execv () கணினி செயல்பாடு:

Execl () செயல்பாட்டில், இயங்கக்கூடிய கோப்பின் அளவுருக்கள் செயல்பாட்டிற்கு வெவ்வேறு வாதங்களாக அனுப்பப்படும். Execv () உடன், நீங்கள் அனைத்து அளவுருக்களையும் NULL நிறுத்தப்பட்ட வரிசையில் அனுப்பலாம் argv . வரிசையின் முதல் உறுப்பு இயங்கக்கூடிய கோப்பின் பாதையாக இருக்க வேண்டும். இல்லையெனில், execv () செயல்பாடு execl () செயல்பாட்டைப் போலவே செயல்படும்.

தொடரியல்:

intexecv(கான்ஸ்ட் கரி *பாதை, கரி *கான்ஸ்ட்argv[]);

நாம் execl () உதாரணத்தை பின்வருமாறு மீண்டும் எழுதலாம்:

#சேர்க்கிறது

intமுக்கிய(வெற்றிடம்) {
கரி *பைனரி பாதை= ' / பின் / எல்எஸ்';
கரி *வாதிடுகிறார்[] = {பைனரி பாதை, '-lh', '/வீடு',ஏதுமில்லை};

execv(பைனரி பாதை,வாதிடுகிறார்);

திரும்ப 0;
}

நீங்கள் பார்க்கிறபடி, நான் சரியான வெளியீட்டைப் பெறுகிறேன்.

execvp () கணினி செயல்பாடு:

Execv () கணினி செயல்பாட்டைப் போலவே செயல்படுகிறது. ஆனால், PATH சூழல் மாறி பயன்படுத்தப்படுகிறது. எனவே, execlp () இல் உள்ளதைப் போல் இயங்கக்கூடிய கோப்பின் முழு பாதை தேவையில்லை.

தொடரியல்:

intexecvp(கான்ஸ்ட் கரி *கோப்பு, கரி *கான்ஸ்ட்argv[]);

நாம் execv () உதாரணத்தை பின்வருமாறு மீண்டும் எழுதலாம்:

#சேர்க்கிறது

intமுக்கிய(வெற்றிடம்) {
கரி *நிரல் பெயர்= 'ls';
கரி *வாதிடுகிறார்[] = {நிரல் பெயர், '-lh', '/வீடு',ஏதுமில்லை};

execvp(நிரல் பெயர்,வாதிடுகிறார்);

திரும்ப 0;
}

நீங்கள் பார்க்க முடியும் என, சரியான வெளியீடு காட்டப்படும்.

execle () கணினி செயல்பாடு:

Execl () போலவே வேலை செய்கிறது, ஆனால் அதனுடன் உங்கள் சொந்த சுற்றுச்சூழல் மாறிகளையும் வழங்கலாம். சுற்றுச்சூழல் மாறிகள் ஒரு வரிசையாக அனுப்பப்படுகின்றன envp . கடைசி உறுப்பு envp அணி வரிசையாக இருக்க வேண்டும். மற்ற அனைத்து உறுப்புகளும் முக்கிய மதிப்பு ஜோடிகளை சரமாக கொண்டுள்ளது.

தொடரியல்:

intநிறைவேற்று(கான்ஸ்ட் கரி *பாதை, கான்ஸ்ட் கரி *கோபம்,...,ஏதுமில்லை, கரி * கான்ஸ்ட்envp[] );

Execle () கணினி செயல்பாட்டின் ஒரு எடுத்துக்காட்டு கீழே கொடுக்கப்பட்டுள்ளது:

#சேர்க்கிறது

intமுக்கிய(வெற்றிடம்) {
கரி *பைனரி பாதை= '/பின்/பேஷ்';
கரி *arg1= '-c';
கரி *arg2= 'வெளியே வீசப்பட்டது'$ HOSTNAME ஐப் பார்வையிடவும்:உங்கள் உலாவியில் இருந்து $ PORT.'';
கரி *கான்ஸ்ட்என்வி[] = {'HOSTNAME = www.linuxhint.com', 'போர்ட் = 8080',ஏதுமில்லை};

நிறைவேற்று(பைனரி பாதை,பைனரி பாதை,arg1,arg2,ஏதுமில்லை,என்வி);

திரும்ப 0;
}

நான் இரண்டு சுற்றுச்சூழல் மாறிகளை கடந்துவிட்டேன் HOSTNAME மற்றும் போர்ட் execle () செயல்பாட்டிற்கு. நீங்கள் பார்க்கிறபடி, இயங்கக்கூடியவையிலிருந்து நான் அவற்றை அணுக முடியும் /பின்/பேஷ் .

execve () கணினி செயல்பாடு:

Execle () போலவே உங்கள் சொந்த சுற்றுச்சூழல் மாறிகளையும் execve () உடன் வழங்கலாம். நீங்கள் execv () இல் செய்தது போல் வாதங்களை வரிசையாக அனுப்பலாம்.

தொடரியல்:

intசெயல்படுத்து(கான்ஸ்ட் கரி *கோப்பு, கரி *கான்ஸ்ட்argv[], கரி *கான்ஸ்ட்envp[]);

Execle () உதாரணத்தை பின்வருமாறு மீண்டும் எழுதலாம்:

#சேர்க்கிறது

intமுக்கிய(வெற்றிடம்) {
கரி *பைனரி பாதை= '/பின்/பேஷ்';
கரி *கான்ஸ்ட்வாதிடுகிறார்[] = {பைனரி பாதை, '-c', 'வெளியே வீசப்பட்டது'$ HOSTNAME ஐப் பார்வையிடவும்:$ போர்ட்
உங்கள் உலாவியில் இருந்து.'',ஏதுமில்லை};
கரி *கான்ஸ்ட்பொறாமை[] = {'HOSTNAME = www.linuxhint.com', 'போர்ட் = 8080',ஏதுமில்லை};

செயல்படுத்து(பைனரி பாதை,வாதிடுகிறார்,பொறாமை);

திரும்ப 0;
}

நீங்கள் பார்க்கிறபடி, execle () எடுத்துக்காட்டில் உள்ள அதே வெளியீட்டை நாங்கள் பெறுகிறோம்.

எனவே, லினக்ஸில் சிஸ்டம் புரோகிராமிங்கிற்காக சி -யில் உள்ள எக்ஸெக் செயல்பாட்டுக் குடும்பத்தை நீங்கள் எப்படிப் பயன்படுத்துகிறீர்கள். இந்தக் கட்டுரையைப் படித்ததற்கு நன்றி.