Keluarga Exec*()
Pernah saya singgung bahwa ada beberapa fungsi dalam keluarga exec diantaranya:
- execvp
- execve
- execlp
Kegunaan exec adalah untuk menspawn proses child baru.Pada execlp dan execvp, parameter pertamanya adalah berupa file, maksudnya adalah anda harus sudah memastikan bahwa anda berada pada path yang benar. Sedangkan execve pada manualnya dituliskan bahwa execve mengeksekusi program yang ditunjuk oleh sebuah filename. Berikut contoh kodingan exec:
- execvp
- execve
- execlp
Kegunaan exec adalah untuk menspawn proses child baru.Pada execlp dan execvp, parameter pertamanya adalah berupa file, maksudnya adalah anda harus sudah memastikan bahwa anda berada pada path yang benar. Sedangkan execve pada manualnya dituliskan bahwa execve mengeksekusi program yang ditunjuk oleh sebuah filename. Berikut contoh kodingan exec:
01 | #include <errno.h> |
02 | std::string getErrMsg( int errnum); |
03 |
04 | main() |
05 | { |
06 | string envFile( "environment_variables.conf" ); |
07 | CReadEnvironmentVariablesFile readEnvFile; |
08 | char **Env_envp = readEnvFile.ReadFile(envFile); |
09 |
10 | // Command to execute |
11 | char *Env_argv[] = { ( char *) "/bin/ls" , ( char *) "-l" , ( char *) "-a" , ( char *) 0 }; |
12 |
13 | pid_t pID = fork(); |
14 | if (pID == 0) // child |
15 | { |
16 | // This version of exec accepts environment variables. |
17 | // Function call does not return on success. |
18 |
19 | errno = 0; |
20 | int execReturn = execve (Env_argv[0], Env_argv, Env_envp); |
21 | if (execReturn == -1) |
22 | { |
23 | cout << "Failure! execve error code=" << errno << endl; |
24 | cout << getErrMsg( errno ) << endl; |
25 | } |
26 |
27 | _exit(0); // If exec fails then exit forked process. |
28 | } |
29 | else if (pID < 0) // failed to fork |
30 | { |
31 | cerr << "Failed to fork" << endl; |
32 | } |
33 | else // parent |
34 | { |
35 | cout << "Parent Process" << endl; |
36 | } |
37 | } |
Comments
Post a Comment