Panggilan Sistem Exec di C

Exec System Call C

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

Dalam artikel ini, saya akan berbicara tentang keluarga fungsi exec dan menunjukkan kepada Anda bagaimana menggunakan masing-masing fungsi keluarga exec ini di C. Jadi, mari kita mulai.



Fungsi Sistem C di Keluarga Exec:

Keluarga fungsi exec didefinisikan di header unistd.h . Jadi, Anda harus menggunakan header ini pada program C di mana Anda ingin menggunakan fungsi-fungsi ini.



Fungsi exec yang tersedia bersama dengan parameter fungsinya diberikan di bawah ini:



  • 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 yang dilakukan masing-masing fungsi ini dan bagaimana menggunakannya.

execl() Fungsi Sistem:

Dalam fungsi sistem execl() mengambil jalur file biner yang dapat dieksekusi (mis. / bin / ls ) sebagai argumen pertama dan kedua. Kemudian, argumen (mis. -lh , /rumah ) yang ingin Anda berikan ke executable diikuti oleh BATAL . Kemudian fungsi sistem execl() menjalankan perintah dan mencetak output. Jika terjadi kesalahan, maka execl() mengembalikan -1. Jika tidak, itu tidak mengembalikan apa pun.

Sintaksis:

ke dalamexecl(konstan arang *jalur, konstan arang *marah,...,BATAL);

Contoh fungsi sistem execl() diberikan di bawah ini:



#termasuk

ke dalamutama(ruang kosong) {
arang *binerPath= '/ bin / ls';
arang *arg1= '-lh';
arang *arg2= '/rumah';

execl(binerPath,binerPath,arg1,arg2,BATAL);

kembali 0;
}

aku berlari ls -lh / rumah perintah menggunakan fungsi sistem execl(). Seperti yang Anda lihat, hasil yang benar ditampilkan.

execlp() Fungsi Sistem:

execl() tidak menggunakan JALUR variabel lingkungan. Jadi, path lengkap dari file yang dapat dieksekusi diperlukan untuk menjalankannya dengan execl(). execlp() menggunakan variabel lingkungan PATH. Jadi, jika file atau perintah yang dapat dieksekusi tersedia di PATH, maka perintah atau nama file cukup untuk menjalankannya, path lengkap tidak diperlukan.

Sintaksis:

ke dalameksekusi(konstan arang *mengajukan, konstan arang *marah,...,BATAL);

Kita dapat menulis ulang contoh execl() menggunakan fungsi sistem execlp() sebagai berikut:

#termasuk

ke dalamutama(ruang kosong) {
arang *nama program= 'l';
arang *arg1= '-lh';
arang *arg2= '/rumah';

eksekusi(nama program,nama program,arg1,arg2,BATAL);

kembali 0;
}

Saya hanya melewati nama perintah ls , bukan jalur lengkap / bin / ls . Seperti yang Anda lihat, saya mendapatkan output yang sama seperti sebelumnya.

execv() Fungsi Sistem:

Dalam fungsi execl(), parameter file yang dapat dieksekusi diteruskan ke fungsi sebagai argumen yang berbeda. Dengan execv(), Anda dapat melewatkan semua parameter dalam array yang diakhiri NULL argv . Elemen pertama dari array harus menjadi jalur file yang dapat dieksekusi. Jika tidak, fungsi execv() berfungsi seperti fungsi execl().

Sintaksis:

ke dalameksekutif(konstan arang *jalur, arang *konstanargv[]);

Kita dapat menulis ulang contoh execl() sebagai berikut:

#termasuk

ke dalamutama(ruang kosong) {
arang *binerPath= '/ bin / ls';
arang *argumen[] = {binerPath, '-lh', '/rumah',BATAL};

eksekutif(binerPath,argumen);

kembali 0;
}

Seperti yang Anda lihat, saya mendapatkan output yang benar.

execvp() Fungsi Sistem:

Bekerja dengan cara yang sama seperti fungsi sistem execv(). Tapi, variabel lingkungan PATH digunakan. Jadi, path lengkap dari file yang dapat dieksekusi tidak diperlukan seperti pada execlp().

Sintaksis:

ke dalamexecvp(konstan arang *mengajukan, arang *konstanargv[]);

Kita dapat menulis ulang contoh execv() sebagai berikut:

#termasuk

ke dalamutama(ruang kosong) {
arang *nama program= 'l';
arang *argumen[] = {nama program, '-lh', '/rumah',BATAL};

execvp(nama program,argumen);

kembali 0;
}

Seperti yang Anda lihat, output yang benar ditampilkan.

execle() Fungsi Sistem:

Bekerja seperti execl() tetapi Anda dapat menyediakan variabel lingkungan Anda sendiri bersamanya. Variabel lingkungan dilewatkan sebagai array envp . Elemen terakhir dari envp array harus NULL. Semua elemen lainnya berisi pasangan nilai kunci sebagai string.

Sintaksis:

ke dalampelaksana(konstan arang *jalur, konstan arang *marah,...,BATAL, arang * konstanenvp[] );

Contoh fungsi sistem execle() diberikan di bawah ini:

#termasuk

ke dalamutama(ruang kosong) {
arang *binerPath= '/bin/bash';
arang *arg1= '-C';
arang *arg2= 'dibuang'Kunjungi $HOSTNAME:$PORT dari browser Anda.'';
arang *konstanenv[] = {'NAMA HOST=www.linuxhint.com', 'PORT=8080',BATAL};

pelaksana(binerPath,binerPath,arg1,arg2,BATAL,env);

kembali 0;
}

Saya melewati dua variabel lingkungan NAMA HOST dan PELABUHAN ke fungsi execle(). Seperti yang Anda lihat, saya dapat mengaksesnya dari yang dapat dieksekusi /bin/bash .

execve() Fungsi Sistem:

Sama seperti execle() Anda dapat menyediakan variabel lingkungan Anda sendiri bersama dengan execve(). Anda juga dapat meneruskan argumen sebagai array seperti yang Anda lakukan di execv().

Sintaksis:

ke dalameksekutif(konstan arang *mengajukan, arang *konstanargv[], arang *konstanenvp[]);

Contoh execle() dapat ditulis ulang sebagai berikut:

#termasuk

ke dalamutama(ruang kosong) {
arang *binerPath= '/bin/bash';
arang *konstanargumen[] = {binerPath, '-C', 'dibuang'Kunjungi $HOSTNAME:$PORT
dari peramban Anda.'',BATAL};
arang *konstanenv[] = {'NAMA HOST=www.linuxhint.com', 'PORT=8080',BATAL};

eksekutif(binerPath,argumen,env);

kembali 0;
}

Seperti yang Anda lihat, kita mendapatkan output yang sama seperti pada contoh execle().

Jadi, begitulah cara Anda menggunakan keluarga fungsi exec di C untuk pemrograman sistem di Linux. Terima kasih telah membaca artikel ini.