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



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

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

struct query { 
char lines[LINESIZE];
};

我有一个结构数组。因此,每个结构都服务于一个子进程。

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

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

假设我有五个结构为每个过程服务。

struct query query[5];

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

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

我想你试图生成5个进程,但在你发布的代码中,你最终会创建5个以上的进程,事实上是:

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

当i=0时,您将派生一个进程,因为派生的进程是父进程的精确副本,它将在for循环中继续,所以在这一点上,您将有两个进程,每个进程的i=1,并为每个进程派生一个新进程,然后在这一点将有4个进程,当循环完成时,您已经创建了160个进程。

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

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

最新更新