명명 된 파이프를 사용하여 C 및 C # 프로그램을 통신하는 방법

포수

C에 하나와 C #에 하나씩 2 개의 실행 파일이 있으며 명명 된 파이프를 통해 통신하기를 원합니다.
C # 앱은 연결을 기다리지 만 연결을 얻지 못합니다
. C 앱은 파이프를 만들려고 시도하지만 항상 ERROR_PIPE_BUSY 가 발생
합니다. 분명히 뭔가 잘못하고 있지만 볼 수 없습니다.

C # 코드

   public partial class MainWindow : Window
    {
        private NamedPipeServerStream pipeServer;

        public MainWindow()
        {
            InitializeComponent();
            pipeServer = new NamedPipeServerStream("TestPipe", PipeDirection.In);
            Debug.WriteLine("waiting");
            pipeServer.WaitForConnection();
            Debug.WriteLine("Connected");
        }
    }

C 코드

   while (1)
   {
       _pipe = CreateNamedPipe(pipename,
         PIPE_ACCESS_OUTBOUND,
         PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,   // FILE_FLAG_FIRST_PIPE_INSTANCE is not needed but forces CreateNamedPipe(..) to fail if the pipe already exists...
         1,
         1024 * 16,
         1024 * 16,
         NMPWAIT_USE_DEFAULT_WAIT,
         NULL);
   // Break if the pipe handle is valid. 

      int err = GetLastError();
      printf("created pipe %d\n", err);
      if (_pipe != INVALID_HANDLE_VALUE)
         break;

      // Exit if an error other than ERROR_PIPE_BUSY occurs. 

      if (err != ERROR_PIPE_BUSY)
      {
         printf("Could not open pipe. GLE=%d\n", GetLastError());
         exit(-1);
      }

      // All pipe instances are busy, so wait for 20 seconds. 

      if (!WaitNamedPipe(pipename, 20000))
      {
         printf("Could not open pipe: 20 second wait timed out.");
         exit(-1);
      }
   }

내 오류는 무엇입니까

포수

액세스 거부 메시지를 극복하기 위해 파이프를 만들 때 액세스 권한을 설정해야합니다.

PipeSecurity CreateSystemIOPipeSecurity()
{
    PipeSecurity pipeSecurity = new PipeSecurity();

     var id = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);

    // Allow Everyone read and write access to the pipe. 
    pipeSecurity.SetAccessRule(new PipeAccessRule(id, PipeAccessRights.ReadWrite, AccessControlType.Allow));

    return pipeSecurity;
}

public MainWindow()
{
    InitializeComponent();
    PipeSecurity ps = CreateSystemIOPipeSecurity();
    pipeServer = new NamedPipeServerStream(
        "TestPipe", 
        PipeDirection.InOut,
        1,
        PipeTransmissionMode.Byte,
        PipeOptions.Asynchronous,
        512,
        512,
        ps,
        System.IO.HandleInheritability.Inheritable);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

명령 프롬프트를 통해 C # 응용 프로그램을 컴파일하는 방법

분류에서Dev

c 프로그램에서 libprocps를 사용하여 열린 파일 설명자 / 핸들을 얻는 방법

분류에서Dev

su -c를 사용하여 파이프에서 실행 된 명령에서 Perl에서 STDERR을 얻는 방법

분류에서Dev

C에서 명명 된 파이프를 사용하여 쉘 스크립트와 통신 할 수 없습니다.

분류에서Dev

차트를 사용하여 C ++ 프로그램을 설명하는 가장 좋은 방법

분류에서Dev

프로그램 C ++를 사용하여 프로그램을 여는 방법

분류에서Dev

파이프 된 명령 / 프로그램 체인과 함께 watch 명령을 사용하는 방법

분류에서Dev

Windows 응용 프로그램에서 wpf 및 c #을 사용하여 파일을 업로드하는 방법

분류에서Dev

python -c를 사용하여 여러 값을 C 프로그램에 파이프하는 방법

분류에서Dev

execlp를 사용하여 C 프로그램에 명령 줄 인수를 전달하는 방법

분류에서Dev

C 프로그램-제공된 방정식을 사용하여 매년 인구 계산 및 표시

분류에서Dev

C 프로그램에서 만든 Bash에서 명명 된 파이프 사용

분류에서Dev

C 프로그램에서 쉘 명령을 실행하는 방법

분류에서Dev

getopt 및 명령 줄 인수를 사용하여 Unix / Linux에서 파일을 여는 C 프로그램 도움말

분류에서Dev

SQL Server Express 2012 및 Crystal Report로 개발 된 C # Windows 양식 응용 프로그램을 배포하는 방법

분류에서Dev

C에서 명령 줄 프로그램을 만드는 방법

분류에서Dev

명령 줄을 사용하여 C ++에서 분리 된 .h 및 .cpp 파일을 컴파일하고 링크하는 방법은 무엇입니까?

분류에서Dev

Visual Studio devolopers 명령 프롬프트를 사용하여 여러 소스 파일 프로그램 C ++ 컴파일

분류에서Dev

C # 프로그램에 C ++ 명령을 포함하는 방법이 있습니까?

분류에서Dev

c ++ / python 프로그램을 사용하여 터미널에서 프로그램을 실행 한 다음 해당 프로그램에서 명령문을 실행하는 방법

분류에서Dev

C 프로그램의 명령 줄 인수로 \ r \ n을 전달하는 방법이 있습니까?

분류에서Dev

perl에서 시스템 명령을 사용하여 컴파일 된 C 프로그램 실행의 stderr을 가져올 수 없습니다.

분류에서Dev

Citrix에서 C # 프로그램의 인스턴스를 사용자 당 한 명으로 제한하는 방법

분류에서Dev

Windows 용 C 프로그램에서 시스템 명령을 실행하는 방법은 몇 가지입니까?

분류에서Dev

Linux 명령 줄에서 프로그램을 종료하는 방법 (ctrl + c 및 ctrl + z가 작동하지 않음)?

분류에서Dev

EASend 메일 DLL을 사용하여 C #으로 디지털 서명 된 이메일을 보내는 방법

분류에서Dev

C # 프로세스를 사용하여 새 명령 줄 창을 열지 않고 "schtasks"로 예약 된 작업을 실행하는 방법은 무엇입니까?

분류에서Dev

C # 프로세스를 사용하여 새 명령 줄 창을 열지 않고 "schtasks"로 예약 된 작업을 실행하는 방법은 무엇입니까?

분류에서Dev

명령 출력을 여러 프로그램으로 파이프하는 방법

Related 관련 기사

  1. 1

    명령 프롬프트를 통해 C # 응용 프로그램을 컴파일하는 방법

  2. 2

    c 프로그램에서 libprocps를 사용하여 열린 파일 설명자 / 핸들을 얻는 방법

  3. 3

    su -c를 사용하여 파이프에서 실행 된 명령에서 Perl에서 STDERR을 얻는 방법

  4. 4

    C에서 명명 된 파이프를 사용하여 쉘 스크립트와 통신 할 수 없습니다.

  5. 5

    차트를 사용하여 C ++ 프로그램을 설명하는 가장 좋은 방법

  6. 6

    프로그램 C ++를 사용하여 프로그램을 여는 방법

  7. 7

    파이프 된 명령 / 프로그램 체인과 함께 watch 명령을 사용하는 방법

  8. 8

    Windows 응용 프로그램에서 wpf 및 c #을 사용하여 파일을 업로드하는 방법

  9. 9

    python -c를 사용하여 여러 값을 C 프로그램에 파이프하는 방법

  10. 10

    execlp를 사용하여 C 프로그램에 명령 줄 인수를 전달하는 방법

  11. 11

    C 프로그램-제공된 방정식을 사용하여 매년 인구 계산 및 표시

  12. 12

    C 프로그램에서 만든 Bash에서 명명 된 파이프 사용

  13. 13

    C 프로그램에서 쉘 명령을 실행하는 방법

  14. 14

    getopt 및 명령 줄 인수를 사용하여 Unix / Linux에서 파일을 여는 C 프로그램 도움말

  15. 15

    SQL Server Express 2012 및 Crystal Report로 개발 된 C # Windows 양식 응용 프로그램을 배포하는 방법

  16. 16

    C에서 명령 줄 프로그램을 만드는 방법

  17. 17

    명령 줄을 사용하여 C ++에서 분리 된 .h 및 .cpp 파일을 컴파일하고 링크하는 방법은 무엇입니까?

  18. 18

    Visual Studio devolopers 명령 프롬프트를 사용하여 여러 소스 파일 프로그램 C ++ 컴파일

  19. 19

    C # 프로그램에 C ++ 명령을 포함하는 방법이 있습니까?

  20. 20

    c ++ / python 프로그램을 사용하여 터미널에서 프로그램을 실행 한 다음 해당 프로그램에서 명령문을 실행하는 방법

  21. 21

    C 프로그램의 명령 줄 인수로 \ r \ n을 전달하는 방법이 있습니까?

  22. 22

    perl에서 시스템 명령을 사용하여 컴파일 된 C 프로그램 실행의 stderr을 가져올 수 없습니다.

  23. 23

    Citrix에서 C # 프로그램의 인스턴스를 사용자 당 한 명으로 제한하는 방법

  24. 24

    Windows 용 C 프로그램에서 시스템 명령을 실행하는 방법은 몇 가지입니까?

  25. 25

    Linux 명령 줄에서 프로그램을 종료하는 방법 (ctrl + c 및 ctrl + z가 작동하지 않음)?

  26. 26

    EASend 메일 DLL을 사용하여 C #으로 디지털 서명 된 이메일을 보내는 방법

  27. 27

    C # 프로세스를 사용하여 새 명령 줄 창을 열지 않고 "schtasks"로 예약 된 작업을 실행하는 방법은 무엇입니까?

  28. 28

    C # 프로세스를 사용하여 새 명령 줄 창을 열지 않고 "schtasks"로 예약 된 작업을 실행하는 방법은 무엇입니까?

  29. 29

    명령 출력을 여러 프로그램으로 파이프하는 방법

뜨겁다태그

보관