草庐IT

管道化

全部标签

c++ - 如何在 Windows 中访问继承的匿名管道 HANDLE,而不是 stdout、stderr 和 stdin?

我正在尝试通过Windows中的匿名管道从子进程接收数据。我知道如何使用标准I/O流来执行此操作,但这些被用于其他目的。我也知道如何在Linux或OSX中使用fork()、pipe()和execv()执行此操作。在Windows中,您可以使用CreatePipe()创建管道,并使用SetHandleInformation()使一端不可继承。然后,对于stdout和stderr,您可以将STARTUPINFO和hStdOutput或hStdError设置为CreateProcess()以传递另一端给child。在调用CreateProcess()之后,父级最接近它的是子级管道末端的句柄。

c++ - 命名管道 : ReadFile after ConnectNamedPipe return ERROR_BROKEN_PIPE

我重新激活了我确定在几个月前使用过的代码。它让我发疯,但它不再是了。我在其他问题中找不到答案。在服务器端,我使用创建了一个管道#defineMAX_MESSAGE_LENGTH1024SECURITY_ATTRIBUTESsa;SECURITY_DESCRIPTORsd;InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);SetSecurityDescriptorDacl(&sd,TRUE,static_cast(0),FALSE);sa.nLength=sizeof(sa);sa.lpSecurityDescr

windows - 如何在 Windows 中捕获命名管道流量

我想检查我在两个进程之间使用的命名管道是否安全。尽管许多人说可以嗅探命名管道流量。我没有找到任何具体的方法来捕获命名管道流量。 最佳答案 您可以使用“PipeMonitor”来查看流经Windows命名管道的内容。此外,要限制对命名管道的访问,您可以在调用CreateNamedPipe函数时为命名管道指定安全描述符。安全描述符控制对命名管道的客户端和服务器端的访问。参见MSDNdoc. 关于windows-如何在Windows中捕获命名管道流量,我们在StackOverflow上找到一个

c# - 命名管道 C# 客户端无法连接到 C++ 服务器

我正在尝试让C++应用程序让C#应用程序知道特定操作何时发生。我尝试这样做的方式是通过命名管道。我已经在C++应用程序上设置了一个命名管道服务器,它似乎正在工作(命名管道已创建-它出现在PipeList检索到的列表中)和C#应用程序上的一个命名管道客户端,失败的地方:C#客户端代码的第一行给出“尚未设置管道句柄。您的PipeStream实现是否调用了InitializeHandle?”错误,第2行抛出“访问路径被拒绝”异常。我哪里错了?C++服务器代码CStringnamedPipeName="\\\\.\\pipe\\TitleChangePipe";HANDLEpipe=Creat

在 Windows 上通过管道进行 Java/C++ 通信

我有两个独立的程序,一个用Java,一个用C++,都在Windows上运行。我们需要在两者之间进行双向进程间通信。到目前为止,我们一直在使用这种笨拙的解决方案,即写入文本文件并在另一端读取它们,其中生产者在写入完成后会生成一个.lock文件,而消费者在完成读取后会删除该文件。..就像我说的,尴尬。如果我们在*nix上,我们将在C++上使用使用popen()的管道,在Java端使用RadomAccessFile。看起来效果不错。我们可以在Windows上做什么?我们可以使用命名管道吗?谢谢。 最佳答案 看看谷歌的ProtocolBuf

c++ - 匿名管道

我写了两个使用匿名管道进行通信的小程序。父进程通过为子进程设置标准IO句柄来共享管道句柄://--SetSTARTUPINFOforthespawnedprocess-------------------------ZeroMemory(&m_ChildSI,sizeof(STARTUPINFO));GetStartupInfo(&m_ChildSI);m_ChildSI.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;m_ChildSI.wShowWindow=SW_HIDE;m_ChildSI.hStdError=m_pipeCh

windows - Sed 不会通过管道传输到文件

我尝试:C:\Users\me\Documents\worknotes\performance\tomcatlogs\livesite\learn>sed-e's/"//g'local07.csv>local07nq.csv但不是输出到文件local07nq.csv,而是输出到控制台。怎么了?我正在使用sed/cygwin/windows。 最佳答案 Windows命令提示符中的引号(至少我使用过的风格)经常有问题。将脚本(s/"//g)放在一个文件中并以这种方式运行它可能会更好:sed-fmyscript.sedlocal07.c

c++ - 通过命名管道发送 DWORD

我试图通过命名管道发送一个DWORD数组,但我一直在试图弄清楚如何发送单个DWORD。这是我到目前为止所得到的://CreateapipetosenddataHANDLEpipe=CreateNamedPipe(L"\\\\.\\pipe\\my_pipe",PIPE_ACCESS_OUTBOUND,PIPE_TYPE_BYTE,1,0,0,0,NULL);/*Waitingfortheothersidetoconnectandsomeerrorhandlingcutout*///HereItrytosendtheDWORDDWORDmsg=0xDEADBEEF;DWORDnumByt

c++:让用户进程写入 LOCAL_SYSTEM 命名管道 - 自定义安全描述符

我有一个作为LocalSystem运行的服务,它在登录用户的session中创建一个进程。然后该服务创建一个命名管道,客户端连接到该管道进行读写。根据https://msdn.microsoft.com/en-us/library/aa365600%28v=vs.85%29.aspx客户端只能从管道中读取(它不是Admin,不是Creator,也不是LocalSystem)。我创建了一个安全描述符来授予用户读写访问权限。但这没有用。所以我尝试为Everyone-Group提供读写访问权限。但这也行不通。我的客户端返回的错误代码始终是ACCESS_DENIED(5)。我很高兴知道我做错了

windows - 如何使 Windows START 命令通过管道接受标准输入并将其传递给它调用的命令?

查看此脚本保存在名为foo.cmd的文件中。@echooffmore+5现在可以以这种方式使用此脚本。dirC:\Windows|foo它从第6行开始显示输出,一次显示一个屏幕(即作为分页器)。在我退出more之前,当前命令提示符一直处于阻塞状态。现在我修改脚本如下,让更多的输出显示在一个单独的窗口中。@echooffstart""more+5现在,如果我运行以下命令,一个新窗口会正常启动,但不会显示任何输出。dirC:\Windows|foostart命令似乎没有接收到我通过管道传输到foo.cmd的dir命令的输出。我该怎么做才能确保通过管道传输到start命令标准输入的任何数据都