利用Linux进程通信(PIC)的共享内存函数,实践操作系统的共享内存进程间通信的相关知识。共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。
任务一:
以实验
2
的进程创建为基础。创建一个子进程,在子进程中向共享内存中写入一个字符串。父进程等
待子进程的结束,当子进程结束后,父进程读出共享内存中子进程写入的字符串。
代码:
#include<sys/shm.h>
#include<sys/stat.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
//初始化一个共享内存区域
int segment_id;
char *shared_memory;
const int size = 4096;
segment_id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR);
shared_memory = (char*)shmat(segment_id, NULL, 0);
pid_t pid;
pid = fork();
if(pid < 0){
fprintf(stderr,"Fork Failed");
exit(-1);
}
else if(pid == 0){//子进程中向共享内存区域写
printf("Child Write: Hi There!\n");
sprintf(shared_memory, "Hi There!");
}
else{//父进程中从共享内存区域读
wait(NULL);
printf("Parent Read: %s\n", shared_memory);
shmdt(shared_memory);
shmctl(segment_id, IPC_RMID, NULL);
exit(0);
}
}
实验结果:
任务二:
取消任务一中父进程对子进程的等待,再次编译,观察运行结果。
实验结果: