Linux--mmap实现进程间通信
3/8/2017来源:ASP.NET技巧人气:1856
服务端程序
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/mman.h> #include <string.h> #include <fcntl.h> #include <errno.h> #include <sys/types.h> int main(int argc, char **argv) { static int couter = 0; if (argc != 2) { PRintf("usage: %s file_name\n", argv[0]); return -1; } int fd = open(argv[1], O_CREAT | O_RDWR, 0744); if (fd < 0) { perror("open"); return -1; } lseek(fd, 0x1000, SEEK_SET); write(fd, "\0", 1); char *mm = (char *)mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (mm == MAP_FAILED) { perror("mmap"); return -1; } close(fd); while(1) { sprintf(mm, "%d[gzhang]", couter++); // *mm = 'G'; sleep(1); } munmap(mm, 0x1000); return 0; }客户端程序
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/mman.h> #include <fcntl.h> #include <sys/mman.h> #include <string.h> #include <sys/types.h> #include <errno.h> int main(int argc, char **argv) { if (argc != 2) { printf("usage: %s file_name\n", argv[0]); return -1; } int fd = open(argv[1], O_RDWR); if (fd < 0) { perror("open"); return -1; } //lseek(fd, 0x1000, SEEK_SET); //write(fd, "\0", 1); char *mm = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (!mm) { printf("mmap error\n"); return -1; } close(fd); while(1) { printf("get [%s]\n", mm); sleep(1); } munmap(mm, 0x1000); return 0; }
最新文章推荐