【发布时间】:2015-10-13 18:32:40
【问题描述】:
大家好!我只是想更多地了解使用 fork() 函数在 Linux 中的父进程和子进程。 我正在尝试制作一个非常简单的程序,在设置共享内存段之后,我可以从孩子那里得到一个结果并将其输出到 parent 中。 我的问题是它似乎不起作用。这是我到目前为止所拥有的
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/types.h>
#define SZ 20
typedef struct
{
int size;
int cz[SZ];
}shared_data;
shared_data* Collatz(int);
int main (void)
{
pid_t pid;
int seg_id,size=sizeof(shared_data);
seg_id=shmget(IPC_PRIVATE,size,S_IRUSR | S_IWUSR);
shared_data *sd=(shared_data *)shmat(seg_id,NULL, 0);
int usr=-1,count,i;
while(usr<1 ||usr >9)
{
printf("Please Enter a Number between 1-9:");
scanf("%d",&usr);
}
pid=fork();
if(pid<0)
{
printf("Fork Failed");
return 1;
}
if(pid==0)
{
sd=Collatz(usr);
shmdt(sd);
}
else
{
wait(NULL);
printf("\nThe Sequence is: %d ",count);
for(i=0;i<sd->size;i++)
{
printf(" %d ",sd->cz[i]);
}
printf("\n");
}
return 0;
}
shared_data* Collatz(int val)
{
int i=0;
shared_data *data=malloc(sizeof(shared_data));
data->cz[i]=val;
while(val!=1)
{
i++;
if(val%2==0)
val=val/2;
else
val=(3*val)+1;
data->cz[i]=val;
}
data->size=i;
return data;
}
【问题讨论】:
-
你的意思是它不起作用?有点模糊
-
我道歉,我基本上没有从父方得到输出。从我所看到的情况来看,因为在这种情况下共享内存部分 *sd->size 没有值。所以我只是假设我在某个地方搞砸了,或者共享内存配置不正确,或者我搞砸了一些代码
标签: linux unix process fork shared-memory