草庐IT

缓冲池

全部标签

c++ - 为现有缓冲区提供 std::istream 接口(interface)而不复制它

我有一个固定长度的字符缓冲区,我想将它提供给一个接受std::istream&的函数。如何在不复制缓冲区的情况下做到这一点?如果这意味着派生自定义streambuf,我想我会接受拷贝。我只是想知道我是否遗漏了一些直截了当的东西。这是我现在正在做的事情(执行不需要的拷贝):voidloadFromBuffer(constchar*buff,size_tlen){std::istringstreamis(std::string(buff,len));//BUFFERCOPIEDHERE:(load(is);}编辑:作为记录,这是使用boost.Iostreams的直接解决方案:#inclu

c++ - "Optimal"IO 缓冲 - 程序员 's or Kernel' s 任务?

我的任务很简单:在Linux上用C++读取和解析一个大文件。有两种方式:逐字节解析。while(/*...*/){...=fgetc(...);/*dosomethingwiththechar*/}逐个缓冲区解析。while(/*...*/){charbuffer[SOME_LARGE_NUMBER];fread(buffer,SOME_LARGE_NUMBER,1,...);/*parsethebuffer*/}现在,逐字节解析对我来说更容易(无需检查缓冲区有多满等)。不过听说读大片效率更高。哲学是什么?“最佳”是否缓冲了内核的任务,所以当我调用fgetc()时它已经被缓冲了?还是建

c - 刷新通信句柄接收缓冲区?

在Win32C中是否有API调用来刷新(转储)COM端口接收缓冲区的内容?我只能找到刷新传输缓冲区的函数。 最佳答案 `PurgeComm()'可以丢弃Tx和Rx缓冲区中的一个或两个缓冲区中的所有字符,并中止端口上任何挂起的读取和/或写入操作。要对端口执行所有操作,请这样说:PurgeComm(hPort,PURGE_RXABORT|PURGE_TXABORT|PURGE_RXCLEAR|PURGE_TXCLEAR)您可能还想确保您已经处理或显式忽略了端口上的任何未决错误,可能是ClearCommError().ReadFile()

windows - Windows 7 串口输出缓冲区大小

Unix串口有一个很大的输出缓冲区。只要缓冲区中有空间,写入调用就会立即返回。当没有足够的空间时,阻塞写入会一直等待,直到缓冲区被清空到某个较低的水平。在Windows7SP1中,内置16550串行端口的行为就好像没有输出缓冲区一样。似乎写入block,直到数据从端口输出。如果有缓冲区,它甚至比设备管理器中设置的16字节(在COM1的高级设置中)还要小。SetupComm函数让我指定输入和输出缓冲区的推荐大小。但是,输出缓冲区大小似乎没有改变任何行为,并且GetCommProperties始终将dwCurrentTxQueue字段设置为零。SetupComm唯一可以做的就是增加输入缓冲

非常大的 10G 缓冲区的 c++ FIFO 实现

我需要实现一个10G环形缓冲区(FIFO)。我需要用C++编写这个程序以进行集成(必须与C++API集成),尽管我认为在Java中使用它的FileChannel类会更容易。我知道我需要使用内存映射文件,只是不确定如何在C++中执行此操作。我想我必须使用缓冲区并将其重新映射到基础文件的不同部分?像那样的东西。无论如何,如果有人有一些示例代码(非MFC),那就太好了。我将在运行Windows732位的32位硬件上实现它。谢谢。 最佳答案 创建在Windows和UNIX上都有效的内存映射文件的一种方法是使用BoostC++库,参见here

windows - 用于保留缓冲区的 Powershell Clear-Host 替代方案

我想要类似Clear-Host的东西,但想要回滚。到目前为止,我所要做的基本上就是添加换行符,直到屏幕清晰为止。虽然当我这样做时,光标开始在页面底部书写(正如预期的那样——尽管不是期望的)。我希望在页面顶部开始书写(对于菜单等——这是很自然的做法)这是打印新行动态计数的代码:do{Write-Host"";$i++}while($i-ne$Host.UI.RawUI.WindowSize.Height)我确实看到了一些关于Transcript模块的信息,但我不希望那样。提前致谢。 最佳答案 这是一个单行代码,可以准确地提供您正在寻找

windows - 当提供的缓冲区太小时返回哪个 HRESULT?

我在IUnknown派生的COM接口(interface)中有一个函数:HRESULTGetPassword([in]longbufferLength,[out]WCHAR*buffer);并且契约是实现应该检查缓冲区是否足够大以存储正在检索的字符串。如果缓冲区足够大,则复制字符串并返回S_OK,否则函数将返回错误指示。但是我找不到合适的HRESULT值。E_UNEXPECTED看起来很愚蠢而且没有帮助。我找到的最接近的是DISP_E_BUFFERTOOSMALL,但看起来它仅适用于IDispatch派生的接口(interface)。如果提供的缓冲区太小,我应该返回哪个HRESULT?

windows - 操作系统缓冲文件有害吗?

我为我的同事写了一个下载库。它将下载的数据写入文件。我的同事发现,即使下载了100Mb数据,该文件也会长时间保持较小。所以他们建议我应该在每次write()之后调用flush()这样它就不会占用内存来缓冲这些数据。但我不认为100Mb的虚拟内存很多,并且认为Windows有理由缓冲这么多数据。你怎么看? 最佳答案 我个人相信操作系统会适本地self调整。至于“立即刷新,以免断电时丢失数据”——如果文件中途断电,你会相信你写入的数据没问题并从那里恢复下载吗?如果是这样,也许值得早点刷新-但我会权衡恢复的复杂性和相对罕见的电源故障,并在

windows - 在 Windows 下更改默认套接字缓冲区大小

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎不是关于aspecificprogrammingproblem,asoftwarealgorithm,orsoftwaretoolsprimarilyusedbyprogrammers的.如果您认为这个问题是关于anotherStackExchangesite的主题,您可以发表评论,说明问题可能在哪里得到解答。关闭3年前。Improvethisquestion我无法更改的应用程序正在丢弃一些传入的UDP数据包。我怀疑接收缓冲区溢出了。是否有注册表设置使默认缓冲区大于8KB?

java - Windows 上的无缓冲子进程标准输出

有没有一种简单的方法可以无缓冲地读取子进程的输出?我正在尝试从Java调用C程序,但显然它在连接到管道时是标准输出block缓冲的,仅在连接到控制台时是行缓冲的。我无法修改C程序。也许有一种方法可以让程序认为它已连接到控制台?也适用于Linux的解决方案的奖励积分。 最佳答案 这不是一个很好的解决方案,但运行时库可能不会缓冲串行端口,所以如果你非常绝望,你可以使用零调制解调器模拟器,例如com0com或其衍生物。 关于java-Windows上的无缓冲子进程标准输出,我们在StackOv