7

私の問題は次のとおりです。名前付きパイプを介して他のプログラムのサーバーとして機能するクローズドソースのサードパーティWin32アプリケーションがあります。つまり、クライアントが次のように動作することを期待しています。

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

このアプリは、私が通信できないことを除いて、WINEで完全に動作します。だからここに私の質問があります:

パイプを開くように要求された場合、WINEは正確に何をしますか?たとえば、〜/ .wine /またはその他の場所にあるFIFOファイルにマップしますか?Linuxアプリケーションからそのようなプログラムと通信する方法はありますか?グーグルはそれについて何も知りません。

ありがとうございました。

4

2 に答える 2

4

ワインの公式ウィキで名前付きパイプ

この記事も役立つ可能性があります:http://lkcl.net/namedpipes/namedpipes-emulation.txt

于 2011-12-13T19:56:11.300 に答える
4

名前付きパイプは、WINE サーバー プロセスによってホストされます。リクエストは、WINE クライアントによってこのプロセスに送信されます。たとえば、CreateNamedPipe次のようなリクエストを使用します。

    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 );
    }

サーバーは、名前付きパイプの接続を管理します。クライアントとサーバーが接続されると、WINE サーバーは fd をクライアントに送信することで邪魔にならなくなります。この fd は、WINE サーバーによって作成された単なる匿名パイプであり、一方の端がパイプ サーバーに送信され、もう一方の端がパイプ クライアントに送信されると思います。

于 2011-12-13T20:20:38.473 に答える