excel不要离开孩子

时间:2012-04-04 16:32:26

标签: c fork

我有一个程序可以读取文件,对其进行处理并将结果放在输出文件中。当我有一个参数(输入文件)时,我创建输出文件并将其写入内容。

我已经创建了一个fork(),以便将stdout重定向到write()内容。

char *program;

program = malloc(80);

sprintf(program, "./program < %s > %s", inputFile, outputFile);   
int st;
switch (fork()) {
  case -1:
       error("fork error");
         case 0:
           /* I close the stdout */
           close (1);

             if (( fd = open(outputfile, O_WRONLY | O_CREAT , S_IWUSR | S_IRUSR | S_IRGRP)==-1)){

                 error("error creating the file \n");
                 exit(1);
             }

             execlp("./program", program,  (char *)0);

             error("Error executing program\n");
              default:
          // parent process - waits for child's end and ends
            wait(&st);
            exit(0);
     //*****************

              }

使用&lt;正确创建子项。 &GT; stdin和stdout文件已创建。 但是,孩子永远不会结束,当我杀死父亲时,输出文件是空的,所以代码没有执行。

发生了什么事? 谢谢!

1 个答案:

答案 0 :(得分:1)

exec系列中的函数无法理解重定向

您拨打execlp的方式,您将一个参数传递给您的计划:./program < %s > %s。这是正确的,一个论点。当然,execlp不知道重定向是什么,program也不知道。

我会将所有代码替换为:

char *program = malloc(LEN);

snprintf(program, LEN, "./program < %s > %s", inputFile, outputFile);  
system(program);