Пример. Вызов программы компиляции
Пример
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{ …
/*тело программы*/
…
execl(“/bin/ls”,”ls”,”-l”,(char*)0);
/* или execlp(“ls”,”ls”, ”-l”,(char*)0);*/
printf(“это напечатается в случае неудачного обращения к предыдущей функции, к примеру, если не был найден файл ls \n”);
…
}
#include <unistd.h>
int main(int argc, char **argv)
{
char *pv[]={“cc”,“-o”,“ter”,“ter.c”,(char*)0};
…
/*тело программы*/
…
execv (“/bin/cc”,pv);
…
}
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int pid;
if ((pid=fork())!=0){
if(pid>0)
{/* процесс-предок */}
else
{/* ошибка */}
}
else
{/* процесс-потомок */}
}
Программа порождает три процесса, каждый из которых запускает программу echo посредством системного вызова exec(). Данный пример демонстрирует важность проверки успешного завершения системного вызова exec(), в противном случае возможно исполнение нескольких копий исходной программы. В нашем случае если все вызовы exec() проработают неуспешно, то копий программ будет восемь. Если все вызовы exec() будут успешными, то после последнего вызова fork() будет существовать четыре копии процесса. В каком порядке они пойдут на выполнение предсказать трудно.
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{
if(fork()==0)
{
execl(“/bin/echo”, ”echo”, ”это”, ”сообщение один”, NULL);
printf(“ошибка\n”);
}
if(fork()==0)
{
execl(“/bin/echo”, ”echo”, ”это”, ”сообщение два”, NULL);
printf(“ошибка\n”);
}
if(fork()==0)
{
execl(“/bin/echo”, ”echo”, ”это”, ”сообщение три”, NULL);
printf(“ошибка\n ”);
}
printf(“процесс-предок закончился\n”);
return 0;
}
Результат работы может быть следующим.