운영 체제 의 파이프 통신

4164 단어 Linuxlinuxshell
무명 파이프 통신
친연 관 계 를 가 진 프로 세 스 간 통신 에 만 pipe () 를 사용 하여 이름 없 는 파 이 프 를 만 들 수 있 습 니 다.
헤더 파일\# include
read () 와 write () 를 사용 하여 무명 파 이 프 를 조작 할 수 있 습 니 다 int fd [2].pipe(fd); ***pipe 는 파 이 프 를 만 들 고 fd [0] 는 이름 없 는 파이프 의 읽 기 단 을 가리 키 며 수신 프로 세 스 (시스템 호출 read (fd [0], buf, size) 를 실현 합 니 다. 파이프 출구 fd [0] 에서 size 문 자 를 읽 는 메 시 지 를 buf 에 넣 습 니 다.fd [1] 는 이름 없 는 파이프 의 쓰기 단 을 가리 키 며 전송 프로 세 스 (파일 시스템 을 이용 한 시스템 호출 write (fd [1], buf, size) 를 실현 하고 buf 의 길 이 를 size 문자 로 하 는 메 시 지 를 파이프 입구 fd [1] 로 보 냅 니 다. * * * * *
⚠️무명 파이프 에 중대 한 제한 이 있 습 니 다!이름 이 없 으 며 친연 관 계 를 가 진 프로 세 스 간 통신 에 만 사용 할 수 있 으 며 프로 세 스 가 끝 난 후 이름 없 는 파이프 가 자동 으로 사라 집 니 다.
유명한 파이프
!!!이름 생 겼 어!유명한 파 이 프 는 이름 없 는 파 이 프 를 개선 하 는 유명한 파 이 프 를 선진 선 출 대기 열 (FIFO) 이 라 고도 부 르 며 파일 시스템 에 존재 하 는 특수 파이프 로 파일 이름 이 있 으 며 파일 을 통 해 통신 한다.그것 은 다음 과 같은 특징 을 가지 고 있다.
  • 서로 관련 이 없 는 두 프로 세 스 간 에 서로 통신 할 수 있다.
  • 이 파 이 프 는 경로 명 을 통 해 지적 할 수 있 고 파일 시스템 에서 볼 수 있다.파 이 프 를 만 든 후에 두 프로 세 스 는 일반 파일 처럼 읽 기와 쓰기 작업 을 할 수 있어 서 매우 편리 합 니 다.
  • FIFO 는 선진 적 인 선 출 규칙 을 엄 격 히 따 르 고 파이프 와 FIFO 에 대한 읽 기 는 항상 처음부터 데 이 터 를 되 돌려 줍 니 다. 이들 에 대한 쓰 기 는 데 이 터 를 끝까지 추가 하 는 것 입 니 다. 예 를 들 어 lseek () 등 파일 포 지 셔 닝 작업 은 지원 되 지 않 습 니 다.

  • 유명한 파이프 생 성
    유명 파 이 프 는 이름 을 아 는 모든 프로 세 스 에 의 해 열 리 고 사용 할 수 있 습 니 다.유명한 파 이 프 를 이용 하여 통신 을 하려 면 통신 쌍방 이 먼저 유명한 파 이 프 를 만 들 고 그 한쪽 과 연결 해 야 파 이 프 를 열 어 읽 고 쓸 수 있다.유명 파이프 에 대응 하 는 파일 이 더 이상 필요 하지 않 을 때 삭 제 를 표시 해 야 합 니 다.유명한 파 이 프 를 만 드 는 두 가지 방법 이 있 습 니 다.
    1. mkfifo
      mkfifo fifoname
    

    매개 변수 설명: fifoname 은 만 들 유명한 파이프 의 이름 입 니 다.헤더 파일\# include\# include\# include 시스템 호출 형식: int mkfifo (const char * pathname, mode t mode);매개 변수 설명: * * pathname * * * 는 문자열 포인터 로 일반적인 경로 이름 으로 생 성 된 유명한 파 이 프 를 저장 하 는 파일 이름 입 니 다. * * * *mode * * * 는 권한 값 으로 만 든 유명한 파이프 파일 의 액세스 권한 을 지정 합 니 다.매개 변수 mode 는 다음 과 같은 조합 이 있 습 니 다: • SIRWXU: 즉 00700 권한 은 이 파일 소유자 가 읽 기, 쓰기, 실행 가능 한 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IRUSR 또는 SIREAD: 즉 00400 권한 은 이 파일 소유자 가 읽 을 수 있 는 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IWUSR 또는 SIWRITE: 즉 00200 권한 은 이 파일 소유자 가 기록 할 수 있 는 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IXUSR 또는 SIEXEC: 즉 00100 권한 은 이 파일 소유자 가 실행 가능 한 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IRWXG: 즉 00070 권한 은 이 파일 사용자 그룹 이 읽 을 수 있 고 쓸 수 있 으 며 실행 가능 한 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IRGRP: 즉 00040 권한 은 이 파일 사용자 그룹 이 읽 을 수 있 는 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IWGRP: 즉 00020 권한 은 이 파일 사용자 그룹 이 기록 할 수 있 는 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IXGRP: 즉 00010 권한 은 이 파일 사용자 그룹 이 실행 가능 한 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IRWXO: 즉 00007 권한 은 다른 사용자 가 읽 기, 쓰기, 실행 가능 한 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IROTH: 즉 00004 권한 은 다른 사용자 가 읽 을 수 있 는 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IWOTH: 즉 00002 권한 은 다른 사용자 가 기록 할 수 있 는 권한 을 가 진 다 는 것 을 의미 합 니 다.S_IXOTH: 즉 00001 권한 은 다른 사용자 가 실행 가능 한 권한 을 가 진 다 는 것 을 의미 합 니 다. * * *반환 값: * * 0, 오류 반환 - 1.
    2. mknod
    mknod fifoname p
    

    매개 변수 설명: fifoname 은 만 들 유명한 파이프 의 이름 입 니 다. 매개 변수 p 는 이 파일 이 파이프 파일 임 을 표시 합 니 다.헤더 파일:\# include\# include\# include 시스템 호출 형식: int mknod (const char * pathname, mode t mode, dev t dev); * * * *매개 변수 설명: * * pathname 은 문자열 포인터 로 일반적인 경로 이름 으로 생 성 된 유명한 파이프 의 파일 이름 을 저장 합 니 다.dev 는 파일 이 있 는 장치 입 니 다. 유명한 파이프 에 대해 매개 변수의 값 은 0 입 니 다.mode 는 유명한 파 이 프 를 만 드 는 모드 입 니 다. 만 든 유명한 파이프 파일 의 액세스 권한 을 지정 합 니 다. 값 의 의 미 는 mkfifo () 의 인자 와 같 습 니 다.하지만 파이프 파일 을 만 들 형식 을 특별히 밝 혀 야 합 니 다: SIFIFO 또는 010. 반환 값: 0, 오류 반환 - 1.
    유명한 파이프 사용
    유명 파 이 프 를 만 든 후 자동 으로 열 리 지 않 습 니 다. 시스템 호출 open () 강 에 대응 하 는 파일 을 열 어야 합 니 다.매개 변수 설명: pathname 은 열 려 는 유명한 파이프 의 경로 이름 입 니 다. flags 는 파일 이 열 렸 을 때의 액세스 방식 입 니 다.다음은 매개 변수 flags 의 가능 한 수치 입 니 다. • ORDONLY: 읽 기 전용 으로 파일 열기;O_WRONLY: 파일 만 쓰기 로 열기;O_RDWR: 읽 기와 쓰기 로 파일 열기;반환 값: 유명한 파이프 파일 을 여 는 읽 기 단 이나 쓰기 단 을 여 는 파일 설명자 (int 형식) 를 성공 적 으로 되 돌려 주 었 습 니 다. 호출 에 실패 하면 - 1 로 되 돌려 줍 니 다.
    유명한 파이프 삭제
    유명 파 이 프 는 프로 세 스 가 끝 난 후에 사라 지지 않 고 일반 파일 과 일치 하 며 디스크 에 존재 합 니 다. 프로 세 스 가 끝 난 후에 유명 파이프 파일 에 저 장 된 통신 정 보 는 통신 의 두 프로 세 스 가 끝 난 후에 자동 으로 분 실 됩 니 다.유명 파 이 프 를 삭제 하려 면 시스템 호출 이 필요 합 니 다 = = unlink () = = 삭제
    헤더 파일:\# include
    시스템 호출 형식 int unlink (const char * pathname);
  • 매개 변수 설명: pathname 은 삭제 해 야 할 유명한 파이프 파일 이름 을 지정 합 니 다.
  • 반환 값: 호출 성공 반환 0, 호출 실패, 반환 - 1
  • 좋은 웹페이지 즐겨찾기