创build命名pipe道时,获取GLE = 5(拒绝访问)错误

我曾尝试创build一个命名pipe道,但得到GLE 5(访问被拒绝的错误)

#include <windows.h> #include <stdio.h> #include <conio.h> #include <tchar.h> #include "iostream.h" //#define PIPE_ACCESS_DUPLEX 0x00000003 //#define PIPE_ACCESS_INBOUND 0x00000001 //#define PIPE_ACCESS_OUTBOUND 0x00000002 #define BUFSIZE 512 int main() { HANDLE hPipe; LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\mynamedpipe"); hPipe=CreateNamedPipe(lpszPipename,PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,BUFSIZE,BUFSIZE,0,NULL); if (hPipe != INVALID_HANDLE_VALUE) cout<<"Valid"; if (GetLastError() != ERROR_PIPE_BUSY) { printf( TEXT("Could not open pipe. GLE=%d\n"), GetLastError() ); return -1; } return 0; } 

lPipeName是无效的,你需要像MSDN例子中那样正确地转义'\'字符(参见这里了解各种错误代码的细节)。

我也使用定义而不是十六进制数字,我使用的管道声明:

 hPipe = CreateNamedPipe( lpszPipename, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, 0, NULL); 

哪个imo更具可读性。

MSDN代码片段是针对客户端的。 服务器端使用CreateNamedPipe创建管道,客户端使用CreateFile连接到已经创建的管道。

编辑: CreatenamedPipe手册页的备注部分的前两个段落描述了为什么您可能会被拒绝访问。 假设这是这个命名管道的唯一的实例,你正在创建的问题可能是你的权限。 你在Vista或Windows 7上? 如果是这样,请确保您以管理员身份运行。 否则,你将不得不玩你的设置,直到你做对了。

PS:当你完成管道时,你是否调用了DisconnectNamedPipe和CloseHandle? 即使管道没有正确创建,我也会打电话给他们。

那么我用我的程序尝试了很多东西,但无法找出创建失败的原因。

我正在使用VC ++ 6.0。 然后,我开始了我的Visual Studio 2008,并创建了一个C ++项目。 粘贴“守则” 编译。 有错误:

 Error 1 fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory 

评论#include "iostream.h"

重建和工作。 不知道为什么发生这种事,但为我工作。 如果您想知道为什么会发生这种情况,或者有解决方案,请更新。