代码之家  ›  专栏  ›  技术社区  ›  Simsons

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

  •  1
  • Simsons  · 技术社区  · 14 年前

    我已尝试创建命名管道,但获得了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;
    }
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Patrick    14 年前

    here 有关各种错误代码的详细信息)。

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

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

    哪个更易读。

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

    编辑: 报告备注部分的前两段 CreatenamedPipe 手册页描述您可能被拒绝访问的原因。假设这是您正在创建的命名管道的唯一实例,那么问题可能是您的权限。你使用的是Vista还是windows7?如果是这样,请确保您以管理员身份运行。否则,你就得玩你的设置,直到你得到它的权利。

        2
  •  0
  •   Simsons    14 年前

    嗯,我尝试了很多东西,我的程序,但未能找到为什么创造失败。

    我当时在用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" .