2011-12-13 3 views
5

여기 내 문제가 있습니다. 폐쇄 형 소스 타사 Win32 응용 프로그램이 있습니다.이 프로그램은 명명 된 파이프를 통해 다른 프로그램의 서버 역할을합니다. 예를 들어 클라이언트가 다음과 같이 smth를 수행 할 것으로 예상합니다.WINE 및 Windows 명명 된 파이프

HANDLE h = CreateFile("\\\\.\\pipe\\$pipe_name$", GENERIC_READ | GENERIC_WRITE, etc...); 
// ... 
TransactNamedPipe(h, buf, etc...); 
// ... 
CloseHandle(h); 

이 앱은 완전히 통신 할 수 없다는 점을 제외하고는 WINE에서 완벽하게 실행됩니다. 그래서 제 질문은 여기에 있습니다 :

파이프를 열어야 할 때 포도주는 정확히 무엇을합니까? 그것은, 말하자면 ~/.wine /에있는 어떤 FIFO 파일에 맵핑합니까? 리눅스 응용 프로그램에서 이러한 프로그램과 통신 할 수있는 방법이 있습니까? Google은 그것에 대해 아무 것도 모릅니다.

감사합니다. http://lkcl.net/namedpipes/namedpipes-emulation.txt

답변

2

명명 된 파이프가 WINE 서버 프로세스에 의해 호스팅되는 : 와인 공식 위키

이 문서가 너무 도움이 될 수있는

+0

Wine 환경에서 Win 앱과 통신하는 것만 가능하다는 뜻입니까? 이 환경과 기본 Linux 사이의 "벽을 어지럽히는"방법을 이해하지 못합니다. – ScumCoder

+0

예, 파이프에 액세스하기 위해 어떤 식 으로든 WINE 서버와 통신해야합니다. –

+0

고맙습니다. 제가 할 수있는 것을 보여 드리겠습니다. – ScumCoder

2

Named Pipes. 요청은 WINE 클라이언트에 의해이 프로세스로 전송됩니다.

SERVER_START_REQ(open_file_object) 
    { 
     req->access  = access; 
     req->attributes = attr->Attributes; 
     req->rootdir = wine_server_obj_handle(attr->RootDirectory); 
     req->sharing = sharing; 
     req->options = options; 
     wine_server_add_data(req, attr->ObjectName->Buffer, attr->ObjectName->Length); 
     io->u.Status = wine_server_call(req); 
     *handle = wine_server_ptr_handle(reply->handle); 
    } 

서버는 네임드 파이프를 연결 관리하는 예를 들어, CreateNamedPipe 같은 요청을 이용한다. 클라이언트와 서버가 연결되면 클라이언트에 fd를 전송하여 WINE 서버가 방해를받지 않게됩니다. 나는이 fd가 WINE 서버에 의해 생성 된 익명 파이프 일 뿐이라고 생각합니다. 한 쪽 끝은 파이프 서버에 보내지고 다른 쪽 끝은 파이프 클라이언트에 보내집니다.

+1

이것은 원격 파이프입니다. 그는 지방의 파이프에 관해 묻고있다. –

+1

"Named Pipes"(https://wiki.winehq.org/NamedPipes)는 이제 빈 페이지입니다. – Pierre