C 언어 구현 프로 세 스 간 통신 원리 분석
4174 단어 C 언어프로 세 스커 뮤 니 케 이 션
1:파 이 프 를 이용 하여 프로 세 스 간 통신
다음 함수 사용
파 이 프 는 친연 관 계 를 가 진 프로 세 스 에 만 사용 할 수 있 습 니 다.파일 로 볼 수 있 지만 일반 파일 과 달리 파 이 프 는 한 번 에 한 프로 세 스 에 만 접근 할 수 있 고 서로 배척 할 수 있 습 니 다.
pipe(int fd[])의 매개 변 수 는 길이 가 2 인 int 배열 로 각각 읽 기 단 fd[0],쓰기 단 fd[1]를 대표 하고 파 이 프 를 만 든 후에 f d[0],fd[1]는 파일 설명자 가 됩 니 다.
파이프 한쪽 fd[1]의 데 이 터 를 기록 합 니 다.파이프 의 다른 한쪽 fd[0]에서 프로 세 스 가 읽 을 수 있 습 니 다(read).
코드
2:공유 메모리 로 통신 실현,신 호 량 상호 배척 실현
공유 메모리 에 다음 함 수 를 사 용 했 습 니 다:
int shm_open (const char *name, int oflag, mode_t mode); //공유 메모 리 를 만 들 거나 열 고 파일 설명 자 를 되 돌려 줍 니 다.
int ftruncate (int fd, off_t FILE_SIZE); //공유 메모리 공간 크기 조정
void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset)//프로 세 스 의 주소 공간 에 파일 을 비 추고 주소 공간 을 가리 키 는 지침 을 되 돌려 줍 니 다.
int munmap (void *start, size_t length); //주소 맵 해제
int shm_unlink (const char *name); //shm 삭제open()생 성 된 공유 메모리
함수 의 구체 적 인 용법 을 보면 링크 를 볼 수 있 고 상세 하 게 설명 할 수 있 습 니 다.
구체 적 인 사고:
1.프로 세 스 간 의 통신 을 실현 하 는 것 은 각 프로 세 스 간 의 데이터 교류,전송 일 뿐 입 니 다.
1、shm_open()함 수 는 존재 하 는 공유 메모 리 를 만 들 거나 열 고 파일 설명 자 를 되 돌려 주 는 것 입 니 다.파일 을 만 들 거나 열 었 다 고 볼 수 있 습 니 다.표현 이 다 를 뿐 입 니 다.
2.ftruncate()함수 가 파일(fd)의 크기 를 지정 하 는 데 사 용 됩 니 다.
3.관건 적 인 절 차 는 mmap()입 니 다.지정 한 파일(fd)이나 다른 대상 을 메모리 에 투사 하여 직접 조작 할 수 있 는 포인터 대상 을 얻 습 니 다.write,read 등 을 호출 하지 않 아 도 됩 니 다.
4.그 다음 에 사용 이 완료 되면 맵 을 해제 하고 생 성 된 공유 메모리(name)shm 를 삭제 해 야 합 니 다.unlink(),; 공유 메모리 열기 작업 을 하 는 프로 세 스에 도 이 작업 을 수행 해 야 합 니 다(1,2,3,4)
2.그 다음 에 신 호 량 으로 상호 배척 을 실현 한다.
서로 배척 하 는 뜻 은 프로 세 스 가 임계 구역 에서 공유 자원 에 접근 할 때 다른 프로 세 스 는 이 임계 구역 에 들 어가 공유 자원 에 접근 할 수 없다 는 것 이다.
임계 구역 대표 프로 세 스 가 공유 자원 의 코드 에 접근 할 것 입 니 다.
우리 가 공유 구역 에 데 이 터 를 기록 할 때,분명히 여러 프로 세 스 가 동시에 접근 하고 싶 지 않다.왜냐하면 불필요 한 번 거 로 움 을 초래 할 수 있 기 때문에,이러한 상호 배척 메커니즘 을 실현 하기 위해 신 호 량 이 필요 하 다.
sem_t * sem_open (const char *name,int oflag, mode_t mode,unsigned int value) //존재 하 는(name)신 호 량 을 만 들 거나 엽 니 다.
int sem_wait (sem_t*sem)//신 호 량(value)을 1 로 줄 이 고 신 호 량 이 0 보다 적 으 면 semwait()를 실행 하 는 프로 세 스 를 차단 합 니 다.
임계 구역 코드 는 일반적으로 이 두 호출 사이 에 존재 합 니 다.예 를 들 어 현재 프로 세 스 는 공유 구역 에 데 이 터 를 씁 니 다.예 를 들 어 semwait 차단,자원 이 다 떨 어 졌 거나 다른 프로 세 스 가 접근 하고 있 음 을 표시 합 니 다.기 다 려 야 합 니 다.
int sem_post (sem_t*sem)//현재 프로 세 스 가 임계 구역 을 떠 날 때 신 호 량(value)을 1 추가 합 니 다.
int sem_unlink(count char*name)//신 호 량 삭제
함수 의 구체 적 인 용법 을 보면 링크 를 볼 수 있 고 상세 하 게 설명 할 수 있 습 니 다.
코드
주의해 야 할 것 은:
1:공유 메모리 와 신 호 량 을 사용 할 때 주의해 야 합 니 다.어떤 호출 은 공유 메모리 와 신 호 량 을 사용 하 는 name 이지 만,어떤 호출 은 그들의 반환 값(fd 와 semt*)
2:하위 프로 세 스 가 생 성 되 기 전에 부모 프로 세 스 가 공유 메모리 나 신 호 량 을 만 들 었 다 면 하위 프로 세 스 는 열 필요 가 없 으 며 직접 사용 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.