使用fork()确定所有命令行参数的行数

时间:2016-09-16 14:06:55

标签: c fork command-line-arguments

我试图使用fork命令行参数,以便每个子进程确定参数是否是有效的文件名。如果是,我想计算文件中的行数,如果是偶数则返回0,如果是奇数,则返回1。我希望父进程能够使用这些返回的数字来输出所有文件中的行数是奇数还是偶数。

我试着编写一些代码(下面),但我显然对C很新,并且不知道如何解决这个问题。我只是希望有人可以给我一些提示,或指出我正确的方向让自己开始。

谢谢你,我感谢任何帮助!

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
  pid_t child_pid = fork();

  if (child_pid == 0) 
  {
    exit(-1)
  }

  else if (pid > 0) 
  {
    valid = access (pid, R_OK);
    if (valid == 0) 
    {
      /** count number of lines in file 
          return 0 if even, 1 if odd
       */
    }
    else 
    {
      exit(-1)
    }
  }

  else
  {
    return 1;
  }
  /* use child returned values to determine whether odd or even amount of lines in all files */
  return 0;
}

1 个答案:

答案 0 :(得分:1)

fork函数here有一个参考。阅读它,您将了解到它将0返回到子进程,将子进程的PID返回给父进程。所以,n进程需要这样的东西:

int   i;
pid_t pid;

for(i = 0; i < n; i ++)
{
  pid = fork();

  if(pid == 0) break;
}

if(pid == 0)
{
  // Do child's job
}
else
{
  // Do parent's job
}

父母的工作当然包括等待孩子终止计算并显示你需要的任何东西。

Here是对access函数的引用,因为它似乎也是另一个问题。