问题标签 [fflush]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - I am not able to flush stdin
How to flush the stdin??
Why is it not working in the following code snippet?
#xA;Now if i give the input as 11 characters, only 9 should be read but the remaining two characters in the stdin are not flushed and read again in the argq. Why?
Input: 123 456 789
Output: 123 456 89
Why am i getting this 89 as the output?
c - fflush 和 '没有剩余磁盘空间'
我正在编写一个程序,某种数据库。当我阅读手册时,fclose(3)
我发现它调用fflush(3)
将缓冲区刷新FILE*
到磁盘(实际上是操作系统缓冲区,但现在没关系,我们总是可以调用fsync(2)
)。
因为我正在编写数据库,所以很明显我想防止数据丢失。如果没有磁盘空间并且fflush(3)
失败fclose(3)
——我们将丢失我们的数据,因为
FILE*
在错误后使用fclose()
将导致未定义的行为
所以我考虑过明确使用fflush(3)
before fclose(3)
,警告用户磁盘空间不足并fflush(3)
在一段时间后调用。
我已经阅读了C标准并认为这是一个好主意。在实践中,第二次调用失败后fflush
总是返回 0(没有错误),但实际上什么也不做。fsync
没有帮助我(我认为数据可能保存在 RAM 中)。
在这种情况下如何防止数据丢失?也许有一些经验法则。
这是我的测试代码:
fflush - fflush 和 fsync 的区别
我认为fsync()
在fflush()
内部进行,所以fsync()
在流上使用是可以的。但是在网络 I/O 下执行时,我得到了意想不到的结果。
我的代码片段:
但似乎_commit()
没有刷新数据(我在 Windows 上尝试过,数据写在 Linux 导出的文件系统上)。
当我将代码更改为:
它刷新数据。
我想知道是否_commit()
与fflush()
. 有什么输入吗?
c - 使用 fflush(stdin)
因此,快速谷歌搜索fflush(stdin)
清除输入缓冲区会发现许多网站警告不要使用它。然而,这正是我的 CS 教授教全班的方式。
使用有多糟糕fflush(stdin)
?我真的应该放弃使用它吗,即使我的教授正在使用它并且它似乎可以完美地工作?
windows - 即使系统崩溃也能保持“几乎完整”的日志
我们有一个在 windows 和 unix 上运行的 c++ 应用程序(控制台)。此应用程序使用输出文件来输出系统调用/打印/等的详细日志文件。问题是,在某些情况下,我们可能会在添加新功能后获得 11/2 信号。
现在,每当发生这种情况时,我们都不会从日志文件中获取“几乎完整”的信息来追踪错误/问题的根源,因为当信号 11 发生时输出文件没有正确关闭。(它只是部分或零大小)
我们考虑在每个 fprintf 行打印之后添加一个刷新命令。问:
- 这被认为是一种很好的做法吗?
- fflush 在 windows 平台上运行良好吗?
- 在系统可能意外崩溃时保留日志文件的任何想法/其他方法?
c - fflush 和 while 循环
我一直在尝试使用 fflush 来制作进度条。为了测试 fflush,我写了下面的小代码。
当我取消注释“sleep(1);”时,它可以正常工作 但是如果它仍然被注释掉,它会以一种意想不到的方式工作。它打印第一个破折号,等待而不是打印所有剩余的 9 个并退出。
我不明白为什么它会有所作为。
c - c中的fflush(标准输出)
就在我在 fflush(stdout) 并在 GDB 中中断时,我可以在实际打印之前知道 stdout 中有什么吗?
我怎样才能知道任何时候标准输出中有什么?
c++ - 由于段错误,我的程序在 fflush 上崩溃,...但并非总是如此?
您知道标题中描述的这种情况的可能原因是什么?这是我的 bt 的样子:
它给了我Program terminated with signal 11, Segmentation fault.
fflush() 的包装很简单,什么都不做,只是调用fflash
并检查错误(如果返回的代码是 <0 )。所以,我猜段错误是由fflash
. 或者它可能在其他地方,因为??
在堆栈的顶部?
操作系统:RHEL5;gcc 版本 3.4.6 20060404(红帽 3.4.6-3);使用 gdb 进行调试,其中包含最大调试信息的原始 exe。
我知道磁盘上没有空间的段错误,但这不是这种情况(因为我有一个应用程序的看门狗,它再次重新启动程序并且一切正常)。
任何想法都会有所帮助。谢谢。
编辑
**注意**不能粘贴整个代码,它是 10+ 数千个代码的一部分。此外,这在实时系统上的不同应用程序上工作了多年。这样的崩溃非常非常罕见 - 一年两次。所以,我不认为这是代码中的问题。我知道没有人可以帮助我处理这种事情,这就是为什么我只是在寻求任何想法,为什么 fflush 可能会导致段错误。
printf - 使用 fflush(stdout) 作为 fprintf() 参数安全吗?
我遇到了这行代码:
请注意,该消息不包含任何 %-tag。
这在 Visual C++ 中安全吗?fflush() 成功返回 0,失败返回 EOF。fprintf() 将如何处理这个额外的参数?
我首先认为添加 fflush() 调用而不需要额外的行是一个奇怪的 hack。但是这样写, fflush() 调用将在 fprintf() 调用之前执行,因此它不会刷新正在打印的消息,而是等待刷新的消息,如果有的话......我是对的吗?
c - fflush 在 Visual C++ 2010 上失败
我正在尝试运行一些代码,但fflush()
出现错误:
这是代码的相关部分: