2011-10-31 1 views
1

Я пытаюсь выполнить LP для печати PDF-документа и дождаться его выхода. После он существует, я пытаюсь удалить файл с помощью unlink();ANSI C - Выполнять процесс, ждать, удалять файл

Однако ожидание заканчивается еще до того, как 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, "Wait\n"); 
      pid = wait(&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() возвращает ноль в дочернем процессе, а положительное значение в родительском процессе (предполагается, что вилка успешно), и wait(...) имеет смысл только в родительском процессе, поэтому вам нужно поменять содержимое ваших блоков if и else.

 Смежные вопросы

  • Нет связанных вопросов^_^