#c #fork #execv
#c #форк #execv
Вопрос:
Я пытаюсь выполнить LP для печати PDF-документа и дождаться его завершения. После того, как он существует, я пытаюсь удалить файл с помощью unlink();
Однако ожидание завершается еще до того, как execv выполнит LP. Я не совсем уверен, как с этим справиться и почему ожидание не дожидается завершения execv.
Есть ли какой-нибудь другой способ добиться этого?
if(fork())
{
fprintf(stderr, "Executing command %s %s", "/usr/bin/lp", homedir);
char *const parmList[] = {"/usr/bin/lp", homedir, (char *)0};
execv("/usr/bin/lp", parmList );
}else
{
int pid, status;
fprintf(stderr, "Waitn");
pid = wait(amp;status);
fprintf(stderr, "Finished waiting.n");
unlink(homedir);
}
При выполнении приведенного выше кода вывод будет выглядеть следующим образом:
Wait
Finished waiting.
Executing command /usr/bin/lp /home/user/Docs/test.pdf
/usr/bin/lp: Error - unable to access "/home/user/Docs/test.pdf" - No such file or directory
Ответ №1:
fork()
возвращает ноль в дочернем процессе и положительное значение в родительском процессе (при условии успешного завершения fork ) и wait(...)
имеет смысл только в родительском процессе, поэтому вам нужно поменять местами содержимое ваших if
else
блоков and .