VB 建立有名管道通讯(有名管道:CreateNamedPipe) 50
1个回答
展开全部
有控制台程序的确可以通过管道通讯与其它程序建立输入输出联系,但是要进行交互,就要看这个程序本身了。
由于标准输入输出流的缓冲的存在,经常会导致通过管道获取输出的程序的卡死。
比如你要用管道获取ping的结果,那么必须等到ping完成之后才能获取。你要用管道获取cmd中一个命令的执行结果,那么如果这个命令的输出没有引起缓冲区刷新,则你的程序会一直卡死在那里。
上面俩人给的例子我都看了,都是那种最简单的执行一个程序获取控制台输出的例子。不能完成与cmd的交互,也不能完成与绝大部分有控制台输入输出的程序的交互,因为这些例子都是等待一个程序执行完毕后才获取输出,假如一个程序在执行中暂停,等待输入,那么这些例子无一例外的会被卡死。
————————————————————————————
楼主有意无视我的回答啊。
他们只是随便搞了份可以获取控制台输出的代码而已,这种代码网上一搜一大堆的。
我都说的这么明确了,目前没有好的解决方法。你不用指望他们能怎么改进了,你的本质要求是“制作一个程序,能够和cmd进行交互,向cmd发送输入,同时即时获取cmd的输出”,而他们的程序的作用是“执行一个程序并在这个程序结束后获取它的控制台输出”,两个东西完全不一样的。
他们的程序为什么只能成功执行ipconfig?因为那四个可以在cmd中执行的命令里面只有ipconfig是个程序,其它三个都是cmd命令。他们的程序并不是调用cmd,而是自己直执行了程序并获取输出,和cmd一点关系都没沾上。
我专门在这个方面研究过很久,最后微软官方站点给出的答复:“没有完善的解决方案,必须要求控制台程序在每次输出后fflush自己的缓冲才能避免卡死。”这是官方的话(原文是英文的)。
因此你能否通过管道与一个控制台程序交互的关键因素在于这个控制台程序是否经常刷新它的输出缓冲,如果它不做,你自己的程序再努力也没办法的。
如果你还无视我的回答,那我只能无语了。
由于标准输入输出流的缓冲的存在,经常会导致通过管道获取输出的程序的卡死。
比如你要用管道获取ping的结果,那么必须等到ping完成之后才能获取。你要用管道获取cmd中一个命令的执行结果,那么如果这个命令的输出没有引起缓冲区刷新,则你的程序会一直卡死在那里。
上面俩人给的例子我都看了,都是那种最简单的执行一个程序获取控制台输出的例子。不能完成与cmd的交互,也不能完成与绝大部分有控制台输入输出的程序的交互,因为这些例子都是等待一个程序执行完毕后才获取输出,假如一个程序在执行中暂停,等待输入,那么这些例子无一例外的会被卡死。
————————————————————————————
楼主有意无视我的回答啊。
他们只是随便搞了份可以获取控制台输出的代码而已,这种代码网上一搜一大堆的。
我都说的这么明确了,目前没有好的解决方法。你不用指望他们能怎么改进了,你的本质要求是“制作一个程序,能够和cmd进行交互,向cmd发送输入,同时即时获取cmd的输出”,而他们的程序的作用是“执行一个程序并在这个程序结束后获取它的控制台输出”,两个东西完全不一样的。
他们的程序为什么只能成功执行ipconfig?因为那四个可以在cmd中执行的命令里面只有ipconfig是个程序,其它三个都是cmd命令。他们的程序并不是调用cmd,而是自己直执行了程序并获取输出,和cmd一点关系都没沾上。
我专门在这个方面研究过很久,最后微软官方站点给出的答复:“没有完善的解决方案,必须要求控制台程序在每次输出后fflush自己的缓冲才能避免卡死。”这是官方的话(原文是英文的)。
因此你能否通过管道与一个控制台程序交互的关键因素在于这个控制台程序是否经常刷新它的输出缓冲,如果它不做,你自己的程序再努力也没办法的。
如果你还无视我的回答,那我只能无语了。
追问
我對你無語……
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询