Panggilan Sistem Exec di C

Exec System Call C



Keluarga exec mempunyai banyak fungsi dalam C. Fungsi C ini pada dasarnya digunakan untuk menjalankan perintah sistem dalam proses terpisah yang merupakan program utama dan mencetak output.

Dalam artikel ini, saya akan membincangkan tentang fungsi keluarga exec dan menunjukkan kepada anda bagaimana menggunakan setiap fungsi keluarga exec ini di C. Jadi, mari kita mulakan.







Fungsi Sistem C dalam Keluarga Exec:

Keluarga fungsi exec ditentukan dalam tajuk unistd.h . Jadi, anda mesti menggunakan tajuk ini pada program C di mana anda ingin menggunakan fungsi-fungsi ini.



Fungsi exec yang ada bersama dengan parameter fungsinya diberikan di bawah:



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

Mari kita lihat apa fungsi setiap fungsi ini dan cara menggunakannya.





execl () Fungsi Sistem:

Dalam fungsi sistem execl () mengambil jalan dari fail binari yang boleh dilaksanakan (iaitu / bin / ls ) sebagai hujah pertama dan kedua. Kemudian, hujah (iaitu -lh , / rumah ) yang anda mahu sampaikan kepada yang boleh dilaksanakan diikuti oleh BULAN . Kemudian fungsi sistem execl () menjalankan perintah dan mencetak output. Sekiranya terdapat ralat, maka execl () mengembalikan -1. Jika tidak, tidak mengembalikan apa-apa.

Sintaks:

inteksekl(penyambung char *jalan, penyambung char *marah,...,BULAN);

Contoh fungsi sistem execl () diberikan di bawah:



#sertakan

intutama(batal) {
char *perduaanPath= '/ tong / ls';
char *arg1= '-lh';
char *arg2= '/ rumah';

eksekl(perduaanPath,perduaanPath,arg1,arg2,BULAN);

kembali 0;
}

Saya menjalankan ls -lh / rumah arahan menggunakan fungsi sistem execl (). Seperti yang anda lihat, hasil yang betul ditunjukkan.

execlp () Fungsi Sistem:

execl () tidak menggunakan PATH pemboleh ubah persekitaran. Oleh itu, jalan penuh fail yang boleh dilaksanakan diperlukan untuk menjalankannya dengan execl (). execlp () menggunakan pemboleh ubah persekitaran PATH. Jadi, jika fail atau perintah yang dapat dilaksanakan tersedia di PATH, maka perintah atau nama fail sudah cukup untuk menjalankannya, jalan penuh tidak diperlukan.

Sintaks:

intekseklp(penyambung char *fail, penyambung char *marah,...,BULAN);

Kita boleh menulis semula contoh execl () menggunakan fungsi sistem execlp () seperti berikut:

#sertakan

intutama(batal) {
char *nama program= 'ls';
char *arg1= '-lh';
char *arg2= '/ rumah';

ekseklp(nama program,nama program,arg1,arg2,BULAN);

kembali 0;
}

Saya hanya memberikan nama arahan ls , bukan jalan penuh / bin / ls . Seperti yang anda lihat, saya mendapat output yang sama seperti sebelumnya.

execv () Fungsi Sistem:

Dalam fungsi execl (), parameter file yang dapat dieksekusi diteruskan ke fungsi sebagai argumen yang berbeza. Dengan execv (), anda dapat meneruskan semua parameter dalam array yang ditamatkan NULL berhujah . Elemen pertama dari array harus menjadi jalan bagi fail yang boleh dilaksanakan. Jika tidak, fungsi execv () berfungsi sama seperti fungsi execl ().

Sintaks:

intexecv(penyambung char *jalan, char *penyambungberhujah[]);

Kita boleh menulis semula contoh execl () seperti berikut:

#sertakan

intutama(batal) {
char *perduaanPath= '/ tong / ls';
char *berhujah[] = {perduaanPath, '-lh', '/ rumah',BULAN};

execv(perduaanPath,berhujah);

kembali 0;
}

Seperti yang anda lihat, saya mendapat output yang betul.

execvp () Fungsi Sistem:

Berfungsi dengan cara yang sama seperti fungsi sistem execv (). Tetapi, pemboleh ubah persekitaran PATH digunakan. Jadi, jalan penuh fail yang boleh dilaksanakan tidak diperlukan sama seperti di execlp ().

Sintaks:

inteksekusi(penyambung char *fail, char *penyambungberhujah[]);

Kita boleh menulis semula contoh execv () seperti berikut:

#sertakan

intutama(batal) {
char *nama program= 'ls';
char *berhujah[] = {nama program, '-lh', '/ rumah',BULAN};

eksekusi(nama program,berhujah);

kembali 0;
}

Seperti yang anda lihat, output yang betul ditunjukkan.

execle () Fungsi Sistem:

Berfungsi seperti execl () tetapi anda boleh memberikan pemboleh ubah persekitaran anda sendiri dengannya. Pemboleh ubah persekitaran diteruskan sebagai array envp . Unsur terakhir dari envp tatasusunan mestilah NULL. Semua elemen lain mengandungi pasangan nilai kunci sebagai rentetan.

Sintaks:

intmelaksanakan(penyambung char *jalan, penyambung char *marah,...,BULAN, char * penyambungenvp[] );

Contoh fungsi sistem execle () diberikan di bawah:

#sertakan

intutama(batal) {
char *perduaanPath= '/ bin / bash';
char *arg1= '-c';
char *arg2= 'membuang'Lawati $ HOSTNAME:$ PORT dari penyemak imbas anda.'';
char *penyambungenv[] = {'HOSTNAME = www.linuxhint.com', 'PELABUHAN = 8080',BULAN};

melaksanakan(perduaanPath,perduaanPath,arg1,arg2,BULAN,env);

kembali 0;
}

Saya lulus dua pemboleh ubah persekitaran NAMA HOST dan PELABUHAN ke fungsi execle (). Seperti yang anda lihat, saya dapat mengaksesnya dari yang boleh dilaksanakan / bin / bash .

execve () Fungsi Sistem:

Sama seperti execle () anda boleh memberikan pemboleh ubah persekitaran anda sendiri bersama dengan execve (). Anda juga boleh menyampaikan argumen sebagai tatasusunan seperti yang anda lakukan di execv ().

Sintaks:

intmelaksanakan(penyambung char *fail, char *penyambungberhujah[], char *penyambungenvp[]);

Contoh execle () boleh ditulis semula seperti berikut:

#sertakan

intutama(batal) {
char *perduaanPath= '/ bin / bash';
char *penyambungberhujah[] = {perduaanPath, '-c', 'membuang'Lawati $ HOSTNAME:$ PELABUHAN
dari penyemak imbas anda.'',BULAN};
char *penyambungenv[] = {'HOSTNAME = www.linuxhint.com', 'PELABUHAN = 8080',BULAN};

melaksanakan(perduaanPath,berhujah,env);

kembali 0;
}

Seperti yang anda lihat, kami mendapat output yang sama seperti pada contoh execle ().

Jadi, begitulah cara anda menggunakan keluarga fungsi exec di C untuk pengaturcaraan sistem di Linux. Terima kasih kerana membaca artikel ini.