gpt4 book ai didi

c - 使用 fork() 函数使子进程和父进程共享内存

转载 作者:太空宇宙 更新时间:2023-11-04 05:44:26 25 4
gpt4 key购买 nike

我正在尝试让子进程在 fork() 场景中创建斐波那契数列并将其作为 shared_data 存储在 struc 中>。我需要使用赋值中的确切结构,但我从来没有像这样使用过它,所以我假设我在这段代码中遇到的错误与此有关...

26: error: expected identifier (before . token)
39: error: expected identifier (before . token)
44: error: expected expression before shared_data
45: error: expected expression before shared_data

我想我用错了,但正确的方法是什么?如果结构是这样的,它就可以工作:

struct cards{
int a;
int b;
int c;
} cards={0,0,0};

然后我可以使用 cards.a=3; 等等……这是我第一次使用这种共享内存结构,同时研究和查看堆栈也会溢出,人们会问类似的问题,但他们只会让我更加困惑。执行我在下面所做的事情的正确方法是什么?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> /* for fork */
#include <sys/types.h> /* for pid_t */
#include <sys/wait.h> /* for wait */
#define MAX_SEQUENCE 10

typedef struct{
long fib_sequence[MAX_SEQUENCE];
int sequence_size;
} shared_data;

int fibonacci(int n)
{
int first = 0;
int second = 1;
int total, i;
for (i=0;i<=n;i++)
{
printf("%d\n", first);
shared_data.fib_sequence[i] = first;
total = first + second;
first = second;
second = total;
}
return 0;
}
int main(int argc, char *argv[])
{
int j;
/*Spawn a child to run the program.*/
pid_t pid=fork();
if (pid==0) { /* child process */
shared_data.sequence_size = argc;
fibonacci(argc);
}
else { /* pid!=0; parent process */
waitpid(pid,0,0); /* wait for child to exit */
for (j=0; j<=shared_data.sequence_size; j++)
printf("%d\n",shared_data.fib_sequence[j]);
}
return 0;
}

最佳答案

看起来你在这行代码中有错别字:

for (j=0; j<=shared+data.sequence_size; j++)

shared+data应该是 shared_data

关于c - 使用 fork() 函数使子进程和父进程共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593434/

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