mailslot 예제

CreateMailslot에 대한 첫 번째 인수는 메일 슬롯의 null 종료 이름에 대한 포인터입니다. Windows 95, Windows 98 및 Windows Me 플랫폼은 메일 슬롯 이름을 8.3자 이름 형식으로 자동으로 제한합니다. 이로 인해 Windows 95, Windows 98, Windows Me 및 Windows NT 간의 상호 운용성 문제가 발생합니다. 예를 들어.MailslotMymailslot, Windows 95, Windows 98 및 Windows Me로 메일 슬롯을 만들거나 열면 메일 슬롯을 \MailslotMymailsl로 실제로 만들고 참조합니다. CreateMailslot() 및 CreateFile() 함수는 이름 잘림이 발생하더라도 성공합니다. Windows NT에서 Windows 95, Windows 98 또는 Windows Me로 메시지를 보내거나 그 반대로 메일 슬롯 이름이 일치하지 않기 때문에 메시지가 수신되지 않습니다. 클라이언트와 서버가 Windows 95, Windows 98 또는 Windows Me 컴퓨터에서 모두 실행 중인 경우 문제가 없으며 클라이언트와 서버 모두에서 이름이 잘립니다. 상호 운용성 문제를 방지하는 쉬운 방법은 메일 슬롯 이름을 8자 이하로 제한하는 것입니다. 클라이언트 프로그램을 작성하는 방법을 보여 주는 이 자습서에서는 clientlot.c라는 예제가 있습니다. SMB: 일반적으로 Mailslot은 SMB를 전송 프로토콜로 사용합니다. 다음 코드 샘플에서는 CreateMailslot 함수를 사용하여 “sample_mailslot”이라는 이름의 메일 슬롯에 대한 핸들을 검색합니다.

Mailslot에 쓰기의 코드 샘플은 클라이언트 응용 프로그램이 이 메일 슬롯에 쓸 수 있는 방법을 보여 주며 있습니다. 첫 번째 클래스인 CMailslot은 메일 슬롯의 기본 을 캡슐화하는 추상 기본 클래스입니다. 동일한 메일 슬롯 이름으로 Connect()를 두 번 이상 호출할 경우를 방지하기 위한 메서드의 시작 부분에 는 온전성 검사가 있습니다. 정신 확인없이 방법은 진행하고 기존 메일 슬롯에 핸들을 닫고 다시 만들 것입니다. 이 작업은 mailslot에 열린 핸들을 보유한 작성기가 다음 쓰기 시도에서 쓰기 오류가 발생한다는 점을 제외하면 작동합니다. CSyncMailslotWrite::Write() 메서드는 이에 대처할 수 있지만 테스트가 비교적 간단할 때 CPU 주기를 낭비하는 이유는 무엇입니까? 또한 여러 프로그램에서 메일 슬롯을 사용하여 통신합니다. 일반적으로 이들은 아마추어 채팅 클라이언트 및 기타 프로그램[인용 필요]입니다. 상업 프로그램은 일반적으로 파이프 또는 소켓을 선호합니다. MailslotThread = CreateThread(NULL, 0, 서브메일슬롯, NULL, 0, 스레드Id); 반면에 Mailslots는 전송을 위해 UDP 데이터그램을 사용합니다. 즉, 메시지가 배달될 수 없다고 보장할 수 없습니다. 또한 메시지가 전송된 순서대로 수신되지 않는다고 보장할 수 없습니다. 응용 프로그램에 중요한 경우 메시지가 수신되고 주문 메일 슬롯이 반드시 올바른 방법은 아닙니다.

Mailslots를 동일한 컴퓨터에서 프로세스 간 통신 메커니즘으로 사용하는 경우 이동이 좋을 것입니다 – 로컬 컴퓨터에서 손실되거나 시퀀스에서 전송되는 메시지에 대한 배당률은 로컬 컴퓨터에서 소멸될 확률이 매우 낮습니다(로컬 컴퓨터가 다중 프로세서인 경우 주의하십시오. : 내 입니다). 네트워크를 통해 메시지를 보내고 있고 각 메시지가 올바른 순서로 도착해야 하는 경우 다른 IPC 메커니즘을 찾아야 합니다. 예를 들어 다음 호출 CreateMailslot “blort”라는 메일 슬롯슬롯을 만듭니다. C 언어가 문자열에서 백슬래시 문자를 처리하는 방식 때문에 메일 슬롯 이름의 백슬래시를 두 배로 늘려야 합니다. 내 경험에서 Mailslots는 프로세스 간 통신을 위해 명명 된 파이프보다 사용하기가 다소 쉽습니다. 그럼에도 불구하고 단순한 디자인 결정은 아닙니다. 그렇다면 우리는 아마 둘 다 사용할 수 없을 것입니다. 그래서 여기에 장단점이 있습니다. 그런 다음 메시지를 큐에 넣고 실제로 메시지를 작성하는 별도의 스레드에 CSyncMailslotWriter의 인스턴스를 사용하는 CQueuedMailslotWriter가 있습니다.

이 클래스는 비동기이며 네트워크 대기 시간에서 작성자를 분리합니다. 작성기 프로세스는 주 스레드가 메시지를 계속 생성하는 동안 원하는 경우 수천 개의 메시지를 큐에 대기할 수 있습니다. CQueuedMailslotWriter 클래스는 메일 슬롯을 받을 수 있을 때와 같이 메일 슬롯에 드리블의 세부 사항을 처리합니다.