English 中文(简体)
了解婚礼的缓冲行为
原标题:Understanding buffering behavior of fwrite()

我正在使用“fwrite()”号功能,将数据写给一个关于持久性有机污染物的管道。

较早时,fwrite(>)被多次要求小型数据库(平均20英特)和缓冲被留到fwrite( > 。

它指出,这一写作过程是我的节目中的瓶颈。 因此,我决定将我的代码中的数据作为64KB的区块,然后在使用<代码>fwrite(<>时全文书写。 I used setvbuf() to set the FILE* pointer to No Buffering .

业绩改善并不像我所期望的那样显著。

更为重要的是,<代码>strace输出显示,数据目前仍由tes撰写。 请允许我向我解释这一行为吗? 如果我打电话到fwrite()和64KB号数据,那么为什么在某个时候只用tes写4096条?

是否有替代<条码>fwrite()的替代品,以使用FLE*点子向管道发送数据?

最佳回答

4096年来自作为输油管基础的含水层机器。 有两个地方发生。 其中一个是管道的能力。 该能力是旧版本的短链氯化石蜡上的一个系统页面,该网页有32台轨道i386台。 (关于更现代的六氯环己烷能力为64K)

另外,你把4096个 by子问题放在固定的<条码>:PIPE_BUF上,是保证原子治疗的 by的数量。 在Linot公司,这一数字为4096。 这一限制意味着什么,取决于你是否设置了阻挡或不锁的管道。 a man-S7 CAP for all the gory details.

如果你试图以高速度交换大量数据,你可能会想重新考虑你对管道的使用。 你们重新回到了Liberin箱,所以共享记忆是一种选择。 你们可以使用管道发送相对较少的数据,作为信号机制。

问题回答

如果你想要改变缓冲行为,就必须在<条码>f open/条码>之后立即这样做。 (或在任何I/O之前,关于标准文件夹stdin ,stdout,stderr。 您也不想进行令人难以置信的缓冲,并试图管理缓冲循环;相反,请具体说明你的64K缓冲地带为setvbuf。 以便能够适当使用。

如果你真想手工管理缓冲,则不使用<代码>stdio;使用下级<代码>开放/代码>、<代码>write和





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签