gpt4 book ai didi

c++ - 创建命名管道时出现 GLE=5(拒绝访问)错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:40 25 4
gpt4 key购买 nike

我尝试创建一个命名管道,但得到 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 示例中一样正确转义 '\' 字符(有关各种错误代码的详细信息,请参阅 here)。

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

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?即使管道未正确创建,我也会调用它们。

关于c++ - 创建命名管道时出现 GLE=5(拒绝访问)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3582690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com