Prosessi vaihtaa suoritettavaa koodia funktiolla exec(). Siitä on kuusi erilaista muotoa, jotka eroavat komentoriviargumenttien ja ympäristömuuttujien välityksessä. Koodia etsitään annetun polkunimen perusteella funktioissa execl(), execv(), execle(), execve() tai tiedostonimen perusteella ympäristömuuttujassa PATH luetelluista hakemistoista fuktioissa execlp() tai execvp();.
Wiki Markup
Koodille voi välittää komentoriviargumentteja joko listana (execl()) tai vektorina (execv()). Koodille voi välittää edellisten lisäksi myös haluamansa ympäristömuuttujat aina vektorina execle() tai execve() tai äidin ympäristömuuttujat periytyvät lapselle sellaisenaan environ-muuttujasta.
Code Block |
---|
#include < unistd.h > int execl(const char pathname, const char |
...
*arg0, ... / NULL |
...
*/);
int execv(const char |
...
*pathname, char |
...
*const argv |
...
[ |
...
]);
int execle(const char pathname, const char |
...
*arg0, ... / NULL, char |
...
*const envp |
...
[ |
...
] |
...
*/);
int execve(const char |
...
*pathname, char |
...
*const argv |
...
[ |
...
], char |
...
*const envp\[\]);
int execlp(const char filename, const char |
...
*arg0, ... / NULL |
...
*/)
int execvp(const char |
...
*filename, char |
...
*const argv |
...
[ |
...
]); |
Code Block |
---|
\#include < sys/types.h > \#include < sys/wait.h > \#include < unistd.h > char \*env_init\[\] = { "USER=unknown", "PATH=/tmp", NULL }; int main(void) { pid_t pid; if ( (pid = fork()) < 0) perror("fork error"); else if (pid == 0) < 0) perror("execle error"); " >{ /\* specify pathnamepolku, specify environmentympäristö \*/ if (execle("/bin", "echo", "myarg1", "MY ARG2", (char \*) 0, env_init) < 0) perror("execle error"); } if (waitpid(pid, NULL, 0) < 0) perror("wait error"); if ( (pid = fork()) < 0) perror("fork error"); else if (pid == 0) < 0) perror("execlp error"); " >{ /\* specify filenamepolku, inheritympäristö environment \*/ if (execlp("echo", "echo", "only 1 arg", (char \*) 0) < 0) perror("execlp error"); } exit(0); } |