ANSI C - выполнить процесс, подождать, удалить файл - PullRequest
1 голос
/ 31 октября 2011

Я пытаюсь выполнить 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, "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 Ответ

1 голос
/ 31 октября 2011

fork() возвращает ноль в дочернем процессе и положительное значение в родительском процессе (при условии, что форк завершился успешно), а wait(...) имеет смысл только в родительском процессе, поэтому вам необходимо поменять содержимое вашего if и else блоки.

...