(1) 배관 (간단한) 파이프 익명 파이프 (프로세스 간 통신 무관 대해) 반복해서 읽을 수있는 읽기 / FIFO 네임드 파이프 반복 될 수
원리 : 커널 버퍼기구 폼 원형 큐 실현
한계 : 1. 프로세스가 자신의 판독을 기록 할 수
2. 데이터를 반복 할 수없는 읽기
3. 일방향 통신, 하프 - 듀플렉스는
단지 프로세스 간의 공통 조상과 함께 사용할 수있다 (4)
(2) 신호 (최소 오버 헤드)
((3) 공유 메모리 월 무관) : 공유 메모리 부족 mmap에 ------- 경우, munmap (자료 배포, 주소가 첫번째) 처음부터 해제해야
무효 *들을 mmap (무효 * 요지로,이 size_t 길이, 보호 해주는 지능, INT 플래그 전략 중 INT, off_t ) 오프셋
반환 값 : 성공적인 복귀 주소 매핑이 첫 번째를 만들기 위해 MAP_FAILED 매크로 반환하는 데 실패
, 1.add, 첫 번째 주소 매핑 영역의 설립, 커널, NULL 직접 사용 지정 : 매개 변수
, 2.length를 영역 크기의지도를 만들려면
3.prot, 매핑 지역 기관, PROT_READ, PROT_WRITE, PROT_READ | PROT_WRITE의
4.flags, 플래그 매개 변수는 MAP_SHARED (디스크에 반영 매핑 영역에 의해 수행 작업이)
만든 MAP_PRIVATE (매핑 영역을 수정하는 방법 디스크)에 반영되지 않습니다
매핑 파일 기술자 영역을 구축하는 데 사용 5.fd, (읽기 및 4) 디스크에 메모리 쓰기가 공유되기 때문에 쓰기 파일을 열어야
의 4K (6 오프셋 매핑 파일의 정수 회)
(4) 지역 소켓 (가장 안정적)
부모와 자식 사이의 공유 메모리 통신 (혈액 통신)
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<sys/mman.h>
4 #include<unistd.h>
5 #include<fcntl.h>
6 #include<string.h>
7
8 int main()
9 {
10 int fd = open("mytest.txt",O_RDWR | O_CREAT,0644);
11 if(fd == -1 )
12 {
13 perror("open error");
14 exit(1);
15 }
16
17 int len = ftruncate(fd,4);
18 if(len == -1)
19 {
20 perror("ftruncate error");
21 exit(1);
22 }
23 char * p=NULL;
24 p = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
25 if( p == MAP_FAILED )
26 {
27 perror("mmap error");
28 exit(1);
29 }
30 strcpy(p,"abvc\n");
31
32 int ret = munmap(p,4);
33 if(ret == -1)
34 {
35 perror("mummap error");
36 exit(1);
37 }
38 close(fd);
39 return 0;
40 }
혈액 관계 사이에 통신 처리하지
mmap_r.c (프로세스의 읽기 끝)
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<sys/mman.h>
4 #include<unistd.h>
5 #include<fcntl.h>
6 #include<string.h>
7 struct student{
8
9 int id;
10 char name[20];
11 char sex;
12 };
13 int main()
14 {
15 int fd = open("file_shared.txt",O_RDWR | O_CREAT,0644);
16 if(fd == -1 )
17 {
18 perror("open error");
19 exit(1);
20 }
21
22 struct student st;
23 int len = ftruncate(fd,sizeof(st));
24 if(len == -1)
25 {
26 perror("ftruncate error");
27 exit(1);
28 }
29 struct student * p=NULL;
30 p = mmap(NULL,sizeof(st),PROT_READ,MAP_SHARED,fd,0);
31 if( p == MAP_FAILED )
32 {
33 perror("mmap error");
34 exit(1);
35 }
36
37 while(1)
38 {
39 sleep(2);
40 printf("正在读取中.....\n");
41 printf("id=%d,name=%s, sex=%c\n",p->id,p->name,p->sex);
42
43 }
44 int ret = munmap(p,sizeof(st));
45 if(ret == -1)
46 {
47 perror("mummap error");
48 exit(1);
49 }
50 close(fd);
51 return 0;
52 }
mmap_w.c ().