📄 prg13_4_1.c
字号:
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <sys/mman.h>
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int main(int argc,char **argv)
{
int c,fd1,fd2,flags;
int *ptr1,*ptr2;
pid_t pid;
struct stat wstat;
flags = O_RDWR | O_CREAT;
int i;
if (argc > 3)
{
printf("usage %s: <name>",argv[0]);
exit(0);
}
while((c = getopt(argc,argv,"e")) !=-1)
{
switch(c)
{
case 'e':
flags |= O_EXCL;
break;
}
}
shm_unlink(argv[1]);
fd1 = shm_open(argv[1],flags,FILE_MODE);
ftruncate(fd2,sizeof(int));
fd2 = shm_open("/etc/motd",O_RDONLY,FILE_MODE);
fstat(fd2,&wstat); //获取大小信息
if ((pid = fork()) == 0)
{
ptr2 = mmap(NULL,wstat.st_size,PROT_READ,MAP_SHARED,fd2,0);
ptr1 = mmap(NULL,sizeof(int),PROT_READ | PROT_WRITE,
MAP_SHARED,fd1,0);
printf("child:shm ptr =%p,motd ptr = %p\n",ptr1,ptr2);
sleep(5);
printf("shared memory integer = %d\n",*ptr1);
exit(0);
}
else if (pid >0)
{
ptr1 = mmap(NULL,sizeof(int),PROT_READ | PROT_WRITE,
MAP_SHARED,fd1,0);
ptr2 = mmap(NULL,wstat.st_size,PROT_READ,MAP_SHARED,fd2,0);
printf("parent:shm ptr = %p,motd ptr = %p\n",ptr1,ptr2);
*ptr1 = 777;
waitpid(pid,NULL,0);
exit(0);
}
else
{
printf("fork() is error\n");
exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -