折腾一个共享posix内存,搞了将近一个星期,结果发现是自己的程序变量有问题,着实觉着有点冤枉。不管了,先把学习的成果晒出来:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define NAME "/tmp"
int main(int argc,char **argv)
{
int shm_id, pid, status;
struct stat buf;
int *ptr;
pid = fork();
if(pid ==0) {
sleep(2);
shm_id=shm_open(NAME, O_RDWR, 0644);
ftruncate(shm_id,sizeof(int));
fstat(shm_id,&buf);
ptr=(int*)mmap(NULL,buf.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,shm_id,0);
*ptr= 100;
}else{
shm_id=shm_open(NAME,O_RDWR|O_CREAT,0644);
if(shm_id < 0) {
printf("err\n");
exit(0);
}
ftruncate(shm_id,sizeof(int));
ptr=(int*)mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,shm_id,0);
if(ptr==MAP_FAILED) {
printf("err ptr=%d\n",ptr);
printf("errno=%d\n", errno);
exit(0);
}
*ptr= 0;
waitpid(pid, &status, 0);
printf("now *ptr=%d\n", *ptr);
shm_unlink(NAME);/*删除共享内存区*/
}
}
编译文件makefile:
all : clean mem
.PHONY : all
clean :
-rm *.o mem core
mem : mem.o
cc -g -lrt -o mem mem.o
mem.o : mem.c
cc -g -lrt -c mem.c
阅读(686) | 评论(0) | 转发(0) |