1

我正在尝试执行 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
4

1 回答 1

1

fork()在子进程中返回零,在父进程中返回正值(假设分叉成功),并且wait(...)仅在父进程中才有意义,因此您需要交换ifelse块的内容。

于 2011-10-31T11:45:05.800 回答