首页 > 学院 > 开发设计 > 正文

Linux--mmap实现进程间通信

2019-11-06 07:17:23
字体:
来源:转载
供稿:网友

服务端程序

#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;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表