Pemrograman C

Panggilan Sistem Exec di C

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

Pada 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:

Mari kita lihat apa yang dilakukan masing-masing fungsi ini dan bagaimana menggunakannya.

execl() Fungsi Sistem:

Dalam execl() fungsi sistem mengambil jalur file biner yang dapat dieksekusi (i.e. /bin/ls) sebagai argumen pertama dan kedua. Kemudian, argumen (i.e. -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-apa.

Sintaksis:

int execl(const char *path, const char *arg,… , NULL);

Contoh fungsi sistem execl() diberikan di bawah ini:

#termasuk
 
int utama(kosong)
char *binaryPath = "/bin/ls";
char *arg1 = "-lh";
char *arg2 = "/rumah";
 
execl(binerPath, binaryPath, arg1, arg2, NULL);
 
kembali 0;

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

execlp() Fungsi Sistem:

execl() tidak menggunakan JALAN 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:

int execlp(const char *file, const char *arg,… , NULL );

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

#termasuk
 
int utama(kosong)
char *namaprogram = "ls";
char *arg1 = "-lh";
char *arg2 = "/rumah";
 
execlp(nama program, nama program, arg1, arg2, NULL);
 
kembali 0;

Saya hanya melewati nama perintah ls, bukan jalan penuh /bin/ls. Seperti yang Anda lihat, saya mendapatkan hasil yang sama seperti sebelumnya.

execv() Fungsi Sistem:

Dalam fungsi execl(), parameter file yang dapat dieksekusi diteruskan ke fungsi sebagai argumen yang berbeda different. 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:

int execv(const char *path, char *const argv[]);

Kita dapat menulis ulang contoh execl() sebagai berikut:

#termasuk
 
int utama(kosong)
char *binaryPath = "/bin/ls";
char *args[] = binaryPath, "-lh", "/home", NULL;
 
execv(binerPath, args);
 
kembali 0;

Seperti yang Anda lihat, saya mendapatkan hasil 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:

int execvp(const char *file, char *const argv[]);

Kita dapat menulis ulang contoh execv() sebagai berikut:

#termasuk
 
int utama(kosong)
char *namaprogram = "ls";
char *args[] = namaprogram, "-lh", "/home", NULL;
 
execvp(namaprogram, args);
 
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 lain berisi pasangan nilai kunci sebagai string.

Sintaksis:

int execle(const char *path, const char *arg,… , NULL, char * const envp[] );

Contoh fungsi sistem execle() diberikan di bawah ini:

#termasuk
 
int utama(kosong)
char *binaryPath = "/bin/bash";
char *arg1 = "-c";
char *arg2 = "echo "Kunjungi $HOSTNAME:$PORT dari browser Anda."";
char *const env[] = "HOSTNAME=www.linuxhint.com", "PORT=8080", NULL;
 
execle(binerPath, binaryPath,arg1, arg2, NULL, 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:

int execve(const char *file, char *const argv[], char *const envp[]);

Contoh execle() dapat ditulis ulang sebagai berikut:

#termasuk
 
int utama(kosong)
char *binaryPath = "/bin/bash";
char *const args[] = binaryPath, "-c", "echo "Kunjungi $HOSTNAME:$PORT
dari browser Anda."", NULL;
char *const env[] = "HOSTNAME=www.linuxhint.com", "PORT=8080", NULL;
 
execve(binerPath, args, env);
 
kembali 0;

Seperti yang Anda lihat, kami 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.

Cara mengubah penunjuk Mouse dan ukuran kursor, warna & skema pada Windows 10
Penunjuk mouse dan kursor di Windows 10 adalah aspek yang sangat penting dari sistem operasi. Ini dapat dikatakan untuk sistem operasi lain juga, jadi...
Mesin Game Gratis dan Sumber Terbuka untuk Mengembangkan Game Linux
Artikel ini akan membahas daftar mesin game sumber terbuka dan gratis yang dapat digunakan untuk mengembangkan game 2D dan 3D di Linux. Ada banyak mes...
Shadow of the Tomb Raider untuk Tutorial Linux
Shadow of the Tomb Raider adalah tambahan kedua belas untuk seri Tomb Raider - waralaba game aksi-petualangan yang dibuat oleh Eidos Montreal. Permain...