我尝试过创建命名管道但获得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;
}
答案 0 :(得分:1)
lPipeName无效,您需要像在msdn示例中一样正确转义'\'字符(有关各种错误代码的详细信息,请参阅here)。
我还使用了define而不是hex数字,我使用的管道声明为:
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吗?即使管道没有正确创建,我也会打电话给他们。
答案 1 :(得分:0)
我用我的程序试了很多东西但是却无法找出创作失败的原因。
我正在研究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"
。
重建并且有效。不太确定为什么会这样,但对我有用。如果你知道为什么会这样或者有解决方案,请更新。