소켓에서 들어오는 연결을 수신하고 클라이언트를 수락 한 부모 프로세스가 있고 관련 파일 디스크립터와 다른 날짜를 전달합니다 (이름 붙이기 파이프).포크 후 부모 파일에서 자식 파일 작성
이 순간부터 하위 프로세스는 클라이언트에게 서비스를 제공하고 부모는 새 클라이언트를 계속 수신합니다.
내 문제는 자식 프로세스에서 파일 설명자를 쓸 때 잘못된 파일 기술자 오류가 발생하고 쓰기에 실패한다는 것입니다. 내 생각 엔이 파일 설명자가 포크 후에 만들어지기 때문에 자식은 단순히 그들을 사용할 수없고 부모 프로세스에만 속하는 것입니다.
그래서 이것이 쓰기 오류의 원인입니까? 자녀가이 파일 설명자를 사용할 수있는 방법이 있습니까?
가 loreb하여 대답에 언급 된 바와 같이 해결
,이 방법으로, 원하는 결과를 달성 할 수 없다. 다른 파이프를 사용하여 아이의 응답을 부모에게 전달함으로써 임시 수정을 수행했습니다. 파일 디스크립터는 부모에 속하므로 소켓을 통해 응답을 클라이언트에 전달할 수있다.
왜 부모 프로세스에서 소켓을 생성하지 않으므로 파일 설명자가 부모와 자식간에 공유됩니다. –
@Abhiteshkhatri fork가 수행 된 후 클라이언트가 계속 연결되고 fork 후 생성 된 파일 설명자가 공유되지 않기 때문에 부모와 자식. – mdoust
당신은 fork 전에 공유 메모리를 생성하고 공유 메모리에 파일 디스크립터를 보관할 수 있습니다. (파일 디스크립터를 공유 메모리에 두는 방법에 대해서는 의문이 있습니다.) 그렇다면 당신의 기술자는 자식과 부모간에 공유 될 것입니다. –