#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#define MAX_SEQUENCE 10
long fib(long n);
typedef struct{
long fib_seq[MAX_SEQUENCE];
int seq_size;
}shared_data;
int main(int argc,char *argv[] )
{
shared_data sd;
sd.seq_size=atoi(argv[1]);
if (argv==NULL)
{
printf("enter fib.sequence length(0...10)");
exit(0);
}
if (sd.seq_size>10||sd.seq_size<0)
//if(sd.seq_size>=0&&sd.seq_size<=10) printf("%%");
//else
{
printf("entered number must be between 0-10\n");
fflush(stdin);
exit(0);
}
int segment_id;
long* shared_memory;//pointer to the shared mem.seg.
const int size=sizeof(sd);//printf("%d bytes size\n",size);//size of shared mem.seg.
segment_id=shmget(IPC_PRIVATE,size,S_IRUSR|S_IWUSR);//allocate a shared mem.seg.
shared_memory=(long*) shmat(segment_id,NULL,0);//attach shared mem.seg.
//sprintf(shared_memory,"");
//sprintf(shared_memory,itoa(ss));
printf("%s\n",shared_memory);//print string from shared memory
printf("shared mem.(fib.seq.)\n");
printf("====================\n");
pid_t child=fork();
if (child==0)
{
int i;
for(i=0;i<=sd.seq_size;i++)
{
if (i==0||i==1)
sd.fib_seq[i]=i;
else
sd.fib_seq[i]=sd.fib_seq[i-1]+sd.fib_seq[i-2];
*(shared_memory)=sd.fib_seq[i];
printf("%d\n",*(shared_memory));
shared_memory++;
}
printf("======================\n");
shmdt(shared_memory);//detach shared mem.segment.
printf("child %d terminated\n",getpid());
}else if(child>0)
{
wait();
shmdt(shared_memory);//detach shared mem.seg.
shmctl(segment_id,IPC_RMID,NULL);//remove the shared mem.seg.
printf("father %d terminated\n",getpid());
}else
{
printf("error");
exit(0);
}
return 0;
}
hw1.rar_memory
版权申诉
176 浏览量
2022-09-19
15:26:02
上传
评论
收藏 835B RAR 举报
alvarocfc
- 粉丝: 104
- 资源: 1万+