gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:22:31 25 4
gpt4 key购买 nike

因此,我 fork 了几个子进程,每个子进程都应该获取我从文件中读取的一行并对它们进行操作。

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

struct query { 
char lines[LINESIZE];
};

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

这就是我 fork 子进程的方式:

 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 时,您将 fork 一个进程,因为 fork 的进程是父进程的精确副本,它将在 for 循环中继续,因此此时您将有两个进程,每个进程的 i = 1 和将每个进程 fork 为一个新进程,那么此时您将拥有 4 个进程,当循环完成时您已创建 160 个进程。

在 fork 之前分配并初始化数组“query”,这完全没问题,您需要修复的是生成。 fork() 调用在子进程中返回 0,将子进程的进程 ID 返回给父进程;如果出现错误,则返回 -1。知道当前进程是父进程还是子进程,我们可以继续或跳出循环并进行计算:

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

关于c - 每个子进程的结构并访问成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29197225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com