0
大家都好!我只是試圖在Linux中使用fork()函數來了解有關父進程和子進程的更多信息。 我想做一個非常簡單的程序,其中設置共享內存段後,我可以從一個孩子得到一個結果並將其輸出到父級。 我的問題是它似乎沒有工作。以下是我迄今爲止Linux中的共享內存叉進程學習
#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;
}
你是什麼意思,它不起作用?位含糊 –
我apoligise我得不到從父方面基本上輸出。從我看到的情況來看,因爲這種情況下的共享內存部分* sd-> size沒有值。所以我只是假設我搞砸了或共享內存配置不正確,或者我搞砸了一些代碼 – user3819032