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
vdalam nama ambil parameter array untuk menentukanargv[]deretan program baru. Akhir argumen ditunjukkan oleh elemen larik yang berisiNULL. -
Panggilan dengan
ldalam nama ambil argumen dari program baru sebagai daftar argumen panjang variabel ke fungsi itu sendiri. Akhir argumen ditunjukkan dengan(char *)NULLargumen. Anda harus selalu menyertakan tipe cast, karenaNULLdiizinkan menjadi konstanta bilangan bulat, dan konversi argumen default saat memanggil fungsi variadic tidak akan mengubahnya menjadi pointer. -
Panggilan dengan
edalam nama ambil argumen tambahan (atau argumen dalamlcase) untuk menyediakan lingkungan program baru; jika tidak, program mewarisi lingkungan proses saat ini. Ini disediakan dengan cara yang sama sepertiargvlarik:larik untukexecve(), argumen terpisah untukexecle(). -
Panggilan dengan
pdalam nama cariPATHvariabel 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 dariPATHvariabel 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