微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有附加到标准输出的缓冲区大小?

我试图find一些有关Windows上stdout的数据限制的信息。 我似乎无法findMSDN上的信息。

有多less数据可以写入标准输出有限制? 如果是这样,如果达到限制,会发生什么? 数据丢失了吗?

如果stdout被redirect(例如,通过从.Net启动进程并使用processstartinfo.RedirectStandardOutput属性),那么对于可以写入多less数据有什么影响? 当我从调用过程的stdoutstream中读取时,是否会影响限制?

这些限制是否与命名pipe道有关?

创buildWindows用户编程,不用硬编码密码

CLR在哪里安装?

在窗口上绘制位图时不希望的消除锯齿

将数据传递给自定义Windows服务

无法将IStorageItem投射到StorageFile

用C#修饰部分文本文件代码

有没有一种方法可以告诉一个进程启动之前,或启动后在Windows上使用哪个IP地址?

从托pipe代码与设备驱动程序接口 – 无P / Invoke?

Winform应用程序在XP系统上闪烁

如何将拼写检查程序添加到Richtext框?

这取决于它的进展 – 但是,如果你重定向在.NET中的输出,你可以很容易地遇到问题,如果你不读取输出。 当缓冲区用完时,写入到子进程中的stdout将会被阻塞。 导致死锁的一个常见原因是等待“子”退出,然后读取输出的“父”进程 – 如果子进程需要父进程读取输出以释放缓冲区空间,这将不起作用。

.NET允许使用Process.OutputDataReceived和Process.ErrorDataReceived的事件驱动方法稍微简单一些。 这意味着你不需要启动两个线程(一个读取标准输出一个读取标准错误),以防止进程阻塞…

有些事情要记住:

1)Jon是正确的 – 如果达到缓冲区限制,你的子进程中的写入调用将被阻塞。 如果没有被重定向的地方,会导致它自动地耗尽,就像一个文件一样,你需要消耗这个stdout流。 管道需要被排空,通常,如果你可以“附加”到一个子进程的输出,你将连接到一个管道。

2)对输出流的I / O 可能被缓冲,这意味着如果子进程在不显式调用flush()的情况下将某些信息写入stdout flush()这几乎总是如此),则可能看不到输出。 当进程退出时Flush被自动调用,所以如果它是一个简短的小子进程,你应该可以,但是如果没有,你没有办法迫使它的输出在你想要的时候显示出来。

3)命名管道本质上是操作系统维护的可以写入和读取的缓冲区 – 也就是说,它们就像一个文件,你可以从一个进程写入并从另一个进程中读取,而实际上没有磁盘上的文件。 进程之间的通信非常方便,但缓冲区/满缓冲区的所有I / O限制仍然适用。

stdout有一个1024字节的缓冲区

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐