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:
- 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 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:
#termasukint 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:
#termasukint 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:
#termasukint 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:
#termasukint 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:
#termasukint 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:
#termasukint 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.