繁体   English   中英

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

[英]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];

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

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

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

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

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

在派生之前分配并初始化数组“查询”,这非常好,您必须修复的是生成。 fork()调用在子进程中返回0,将子进程的ID返回给父进程;如果有错误,则返回-1。 知道当前进程是父进程还是子进程,我们可以继续或中断循环并进行计算:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM