linux网络编程之共享内存简介和mmap函数
发布时间:2016-05-26 20:49:40 所属栏目:Linux 来源:网络整理
导读:一、共享内存简介 共享内存区是最快的IPC形式,这些进程间数据传递不再涉及到内核,换句话说是进程不再通 过执行进入内核的系统调用来传递彼此的数据。 即每个
下面写 两个程序测试一下: mmap_write.c #include<string.h> #include<stdio.h> #include<stdlib.h> #include<sys/ipc.h> #include<sys/msg.h> #include<sys/types.h> #include<unistd.h> #include<errno.h> #include<fcntl.h> #include<sys/stat.h> #include<sys/mman.h> #define ERR_EXIT(m) do { perror(m); exit(EXIT_FAILURE); } while(0) typedef struct stu { char name[4]; int age; } STU; int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s <file>n", argv[0]); exit(EXIT_FAILURE); } int fd; fd = open(argv[1], O_CREAT | O_RDWR | O_TRUNC, 0666); if (fd == -1) ERR_EXIT("open"); lseek(fd, sizeof(STU) * 5 - 1, SEEK_SET); write(fd, "", 1); STU *p; p = (STU *)mmap(NULL, sizeof(STU) * 5, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (p == -1) ERR_EXIT("mmap"); char ch = 'a'; int i; for (i = 0; i < 5; i++) { memcpy((p + i)->name, &ch, 1); (p + i)->age = 20 + i; ch++; } printf("initialize overn"); munmap(p, sizeof(STU) * 5); printf("exit...n"); return 0; } mmap_read.c #include<string.h> #include<stdio.h> #include<stdlib.h> #include<sys/ipc.h> #include<sys/msg.h> #include<sys/types.h> #include<unistd.h> #include<errno.h> #include<fcntl.h> #include<sys/stat.h> #include<sys/mman.h> #define ERR_EXIT(m) do { perror(m); exit(EXIT_FAILURE); } while(0) typedef struct stu { char name[4]; int age; } STU; int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s <file>n", argv[0]); exit(EXIT_FAILURE); } int fd; fd = open(argv[1], O_RDWR); if (fd == -1) ERR_EXIT("open"); STU *p; p = (STU *)mmap(NULL, sizeof(STU) * 5, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (p == -1) ERR_EXIT("mmap"); int i; for (i = 0; i < 5; i++) { printf("name = %s age = %dn", (p + i)->name, (p + i)->age); } munmap(p, sizeof(STU) * 5); printf("exit...n"); return 0; } (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读