这是我的问题: 我有一个闭源的第三方Win32应用程序,它通过命名管道充当其他程序的服务器,即它希望它的客户端像这样做:
HANDLE h = CreateFile("\\\\.\\pipe\\$pipe_name$", GENERIC_READ | GENERIC_WRITE, etc...);
// ...
TransactNamedPipe(h, buf, etc...);
// ...
CloseHandle(h);
此应用程序在WINE中运行完美,但我无法与之通信。所以这是我的问题:
当要求打开烟斗时,WINE究竟做了什么?比方说,它是否将它映射到〜/ .wine /或其中的某个FIFO文件?是否有任何方式与Linux应用程序中的此类程序进行通信?谷歌对此一无所知。
谢谢。
答案 0 :(得分: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服务器创建的匿名管道,一端发送到管道服务器,一端发送到管道客户端。
答案 1 :(得分:3)
这篇文章也有帮助:http://lkcl.net/namedpipes/namedpipes-emulation.txt