【发布时间】:2024-01-15 03:58:01
【问题描述】:
我有以下程序:
#include <stdio.h>
#include <sys/types.h>
#define MAX_COUNT 100
void ChildProcess(void);
void ParentProcess(void);
void main(void)
{
pid_t pid;
pid = fork();
if (pid == 0)
ChildProcess();
else
ParentProcess();
}
void ChildProcess(void)
{
int i;
for (i = 1; i <= MAX_COUNT; i++)
printf(" This line is from child, value = %d\n", i);
printf(" *** Child process is done ***\n");
}
void ParentProcess(void)
{
int i;
for (i = 1; i <= MAX_COUNT; i++)
printf("This line is from parent, value = %d\n", i);
printf("*** Parent is done ***\n");
}
我必须修改它,让父子打印共享内存中存储的数据,方式如下:
- 在父级中创建并初始化共享内存。
- 用 5 个整数填充共享内存。 (我应该分配足够的共享内存来存储 5 个整数。)
- 从父级分叉到子级。
- 如果 fork 成功,则子进程必须打印存储在共享内存中的值,如预期输出所示,其中 N1、N2、N3、N4、N5 是在共享内存中找到的数字。
我在 ParentProcess 函数中所做的如下:
void ParentProcess(void)
{
int i;
for (i = 1; i <= MAX_COUNT; i++)
printf("This line is from parent, value = %d\n", i);
printf("*** Parent is done ***\n");
int localVar = 0;
int* p = (int*) malloc(2);
pid_t childPID = fork();
*p = 0;
if (childPID >= 0)
{
printf("\nChild process has started\n");
if (childPID == 0)
{
localVar++;
globalVar++;
printf("Child process has found the following data %d,", *p);
*p = 70;
printf( " %d,", *p);
*p = 66;
printf(" %d,", *p);
*p = 51;
printf(" %d,", *p);
*p = 90;
printf(" %d in shared memory\n",*p);
printf("Child is existing\n\n");
}
}
}
现在我意识到我做错了,但我不知道如何解决这个问题。我想我必须使用shmget 来创建共享内存,但是然后呢?如何在其中存储值?
如果您发现无法帮助我解决此问题或时间过长,请分享资源,我可以在其中了解更多关于 Linux 中的 C 编程,特别是关于共享内存的使用。提前谢谢你
【问题讨论】:
标签: c linux fork shared-memory