[c] 유닉스 도메인 소켓 VS 명명 된 파이프?

소켓이라는 이름의 유닉스를 살펴본 후 파이프라는 이름으로 생각했습니다. 나는 이름 파이프를 보았고 큰 차이를 보지 못했습니다. 나는 그들이 다르게 초기화되는 것을 보았지만 그것이 내가 알아 차리는 유일한 것입니다. 둘 다 C 쓰기 / 읽기 기능을 사용하고 AFAIK와 유사하게 작동합니다.

유닉스 도메인 소켓과 명명 된 파이프의 차이점은 무엇입니까? 언제 다른 하나를 선택해야합니까? 기본적으로 어떤 것을 사용해야합니까 (예 : deque, list 또는 필요한 경우 다른 것을 사용하는 것보다 C ++에서 기본적으로 벡터를 사용하는 방법)?



답변

UNIX 도메인 소켓은 일반적으로 명명 된 파이프보다 더 유연합니다. 몇 가지 장점은 다음과 같습니다.

  • 통신하는 두 개 이상의 프로세스에 사용할 수 있습니다 (예 : 잠재적으로 여러 클라이언트 프로세스가 연결되는 서버 프로세스).
  • 양방향입니다.
  • 프로세스간에 커널 확인 UID / GID 자격 증명 전달을 지원합니다.
  • 프로세스 간 파일 설명자 전달을 지원합니다.
  • 패킷 및 시퀀스 패킷 모드를 지원합니다.

이러한 많은 기능을 사용하려면, 당신은 사용할 필요가 send()/의 recv()시스템 호출보다는 가족 write()/을 read().


답변

한 가지 차이점은 명명 된 파이프는 단방향이므로 양방향 통신을 수행하려면 둘 중 두 개를 사용해야합니다. 물론 소켓은 양방향입니다. 하나가 아닌 두 개의 변수를 사용하는 것이 약간 더 복잡해 보입니다 (즉, 하나의 소켓 대신 두 개의 파이프).

또한 위키피디아 기사는 다음과 같은 점 에서 매우 명확 합니다 . “유닉스 도메인 소켓은 바이트 스트림 또는 데이터 그램 시퀀스로 생성 될 수 있지만 파이프는 바이트 스트림 전용입니다.”


명명 된 파이프는 실제로 양방향이지만 반이중 입니다. 이것은 통신이 끝 A에서 끝 B로 또는 B에서 A로 갈 수 있지만 동시에 둘다는 불가능 함을 의미합니다.


답변