每个子进程的结构和访问成员

A struct for each child process and accessing the members

所以我分叉了几个子进程,每个子进程都应该采用我从文件中读取的一行并对它们进行操作。

我拥有的是一个包含以下行的结构:

struct query { 
char lines[LINESIZE];
};

我有一个结构数组。所以每个结构都服务于一个子进程。

这就是我分叉子进程的方式:

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

假设我有五个结构来为这些进程中的每一个服务。

struct query query[5];

因此,第一个进程获取查询[0].lines 并对其执行一些操作,第二个进程获取query[1].lines 并对其执行相同的操作,依此类推...

我应该使用管道在进程之间传递值吗?我觉得有一个更简单的解决方案,但我在 C 方面缺乏实践和知识确实让我放慢了速度。

我想您正在尝试生成 5 个进程,但在您发布的代码中,您最终会创建超过 5 个进程,实际上是在:

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

当 i = 0 时,你将分叉一个进程,因为分叉进程是父进程的精确副本,它将在 for 循环中继续,所以此时你将有两个进程,每个进程都有 i = 1 并为每个进程创建一个新进程,此时您将拥有 4 个进程,当循环完成时,您已经创建了 160 个进程。

在分叉之前分配和初始化数组 "query" 它非常好,你必须修复的是产卵。子进程中的 fork() 调用 returns 0,子进程的进程 id 到父进程,如果有错误则为 -1。知道当前进程是父进程还是子进程,我们可以继续或跳出循环并进行计算:

for(i = 0; i < 5; ++i) {
  if(fork() == 0) {
    /* child process */
    process_query(query[i]);
    exit();
  }
}