IPC(Pipe, Shared Mem)
c++ windows pipe client , server예제
hellobird
2019. 1. 31. 19:19
클라이언트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | int main() { HANDLE hPipe; unsigned char buffer[1024]; DWORD dwRead; /* hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\Foo"), PIPE_ACCESS_DUPLEX, 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); if (hPipe == INVALID_HANDLE_VALUE) co_s("handle error!"); */ hPipe = ::CreateFileA((c::p)"\\\\.\\pipe\\Foo", GENERIC_READ | GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, nil); if (hPipe == INVALID_HANDLE_VALUE) co_s("handle error!"); while (hPipe != INVALID_HANDLE_VALUE) { while (ReadFile(hPipe, buffer, sizeof(buffer) - 1, &dwRead, NULL) != FALSE) { /* add terminating zero */ //buffer[dwRead] = '\0'; /* do something with data in buffer */ co_s(s_yHdr(buffer)); //bytes to header and rawdata } } return (0); } | cs |
서버:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | int main() { hnd::t hPipe; unsigned long dwWritten; y::p data; headRaw_cP(data, "hello python..!", 16); activate_cpPipe(hPipe, "\\\\.\\pipe\\Foo", 1024); if (hPipe != INVALID_HANDLE_VALUE) { co_s("waiting for client.."); ::ConnectNamedPipe(hPipe, 0); writ_pipe(hPipe,data , 16); CloseHandle(hPipe); } return (0); } | cs |
참고:https://stackoverflow.com/questions/26561604/create-named-pipe-c-windows