Tidak ada exec
system call -- ini biasanya digunakan untuk merujuk ke semua execXX
panggilan sebagai grup. Mereka semua pada dasarnya melakukan hal yang sama:memuat program baru ke dalam proses saat ini, dan menyediakannya dengan argumen dan variabel lingkungan. Perbedaannya terletak pada bagaimana program ditemukan, bagaimana argumen ditentukan, dan dari mana lingkungan berasal.
-
Panggilan dengan
v
dalam nama ambil parameter array untuk menentukanargv[]
deretan program baru. Akhir argumen ditunjukkan oleh elemen larik yang berisiNULL
. -
Panggilan dengan
l
dalam nama ambil argumen dari program baru sebagai daftar argumen panjang variabel ke fungsi itu sendiri. Akhir argumen ditunjukkan dengan(char *)NULL
argumen. Anda harus selalu menyertakan tipe cast, karenaNULL
diizinkan menjadi konstanta bilangan bulat, dan konversi argumen default saat memanggil fungsi variadic tidak akan mengubahnya menjadi pointer. -
Panggilan dengan
e
dalam nama ambil argumen tambahan (atau argumen dalaml
case) untuk menyediakan lingkungan program baru; jika tidak, program mewarisi lingkungan proses saat ini. Ini disediakan dengan cara yang sama sepertiargv
larik:larik untukexecve()
, argumen terpisah untukexecle()
. -
Panggilan dengan
p
dalam nama cariPATH
variabel lingkungan untuk menemukan program jika tidak memiliki direktori di dalamnya (yaitu tidak mengandung/
karakter). Jika tidak, nama program selalu diperlakukan sebagai jalur ke yang dapat dieksekusi. -
FreeBSD 5.2 menambahkan varian lain:
execvP
(dengan huruf besarP
). Ini sepertiexecvp()
, tetapi bukannya mendapatkan jalur pencarian dariPATH
variabel lingkungan, ini adalah parameter eksplisit untuk fungsi:
int execvP(const char *file, const char *search_path, char *const argv[]);
Gunakan man exec
dan baca:
The execv(), execvp(), and execvpe() functions provide an array of pointers to
null-terminated strings that represent the argument list available to the new program.
The first argument, by convention, should point to the filename associated with the file
being executed. The array of pointers must be terminated by a NULL pointer.
execv
int execv(const char *path, char *const argv[]);
Jadi, Anda meneruskan larik sebagai parameter
int execle(const char *path, const char *arg,
..., char * const envp[]);
Hampir sama, tetapi bukan sebagai larik, melainkan sebagai daftar nilai (string), diikuti oleh larik yang menunjukkan lingkungan.
Di sini:
int execvp(const char *file, char *const argv[]);
Anda memanggil file, tanpa jalur, jadi diharapkan Anda sudah berada di path
yang benar sebelum menelepon.
Terakhir namun tidak kalah pentingnya:
int execve(const char *filename, char *const argv[],
char *const envp[]);
Mirip dengan yang sebelumnya, tetapi sekarang Anda memiliki dua larik, untuk argumen dan variabel lingkungan.
Karena semua fungsi ini milik keluarga exec(), izinkan saya differentiate
menurut extra characters
dengan artinya,
1.execve ():
p :not present => nama program yang akan dijalankan diambil dari pathname
v :present => argumen akan diteruskan sebagai array
e :present => environment akan diambil dari envp argument
2.execfile ():
p :not present => nama program yang akan dijalankan diambil dari pathname
l :present => argumen akan diteruskan sebagai list
e :present => environment akan diambil dari envp argument
3.execlp ():
p :present => nama program yang akan dijalankan diambil dari filename
ditentukan atau sistem akan search for program file
di PATH
variabel.
l :present => argumen akan diteruskan sebagai list
e :not present => environment akan diambil dari caller's environ
4.execvp ():
p :present => nama program yang akan dijalankan diambil dari filename
ditentukan atau sistem akan search for program file
di PATH
variabel.
v :present => argumen akan diteruskan sebagai array
e :not present => environment akan diambil dari caller's environ
5.execv ():
p :not present => nama program yang akan dijalankan diambil dari pathname
v :present => argumen akan diteruskan sebagai array
e :not present => environment akan diambil dari caller's environ
6.execl ():
p :not present => nama program yang akan dijalankan diambil dari pathname
l :present => argumen akan diteruskan sebagai list
e :not present => environment akan diambil dari caller's environ