파일 설명자가 각 프로세스에 특정한 경우(즉, 두 프로세스가 동일한 파일 설명자 ID를 사용하여 서로 다른 열린 파일을 참조할 수 있는 경우) 소켓(예: 공유 mmap)과 같은 공유를 통해 파일 설명자를 어떻게 전송할 수 있습니까?
동일한 숫자 주소 범위에 매핑되는 각 프로세스 아래의 커널에 의존합니까?
답변1
소켓을 통해 파일 설명자를 공유하면 커널이 이를 중재합니다. 다음을 사용하여 데이터를 준비해야 합니다.cmsg(3)
이것, 다음을 사용하여 전송sendmsg(2)
다음을 사용하여 수신합니다.recvmsg(2)
커널은 파일 설명자를 전송하는 데 필요한 데이터로 파일 설명자에서 변환을 처리하고 파일 설명자를 수신 프로세스에서 사용할 수 있도록 만드는 후자의 두 작업에 관여합니다.
서로 다른 프로세스의 동일한 fd가 어떻게 동일한 파일을 가리킬 수 있습니까?유용한 배경을 제공하세요. 송신 프로세스는 자신의 (개인) 파일 설명자 테이블과 관련된 내용을 의미하는 파일 설명자를 보냅니다. 커널은 시스템 전체의 열린 파일 테이블에 매핑되는 내용을 알고 필요에 따라 수신 프로세스의 파일 설명자에서 이를 업데이트합니다. 기호 테이블의 새 항목입니다.