2011-10-31 18 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(...)仅在父进程中有意义,因此您需要交换ifelse块的内容。