【问题标题】:C programming: write to file without bufferC 编程:无缓冲区写入文件
【发布时间】:2011-12-05 03:29:22
【问题描述】:

我正在使用fputs将字符串写入文件,但是在debug模式下,语句fputs之后内容并没有写入磁盘。我认为有一些缓冲。但是我想通过直接查看内容来调试检查逻辑是否正确。反正有没有禁用缓冲区?谢谢。

【问题讨论】:

  • 可以,像setbuf(myfilepointer, NULL);这样将setbuf的第二个参数设置为NULL。
  • 你们知道下面有一个很棒的字段,标有“您的答案”,您可以在其中发布这些内容
  • 他们可能已经被失望的选民烧毁了!
  • 我需要再找到 10 个字符才能将其作为实际答案发布!

标签: c buffer


【解决方案1】:

你有几个选择:

  • fflush(f); 在某个点刷新缓冲区。
  • setbuf(f, NULL); 禁用缓冲。

f 显然是你的FILE*。

即。

#include <stdio.h>

int main(void)
{
   char s[100];

   FILE *f = fopen("test.txt", "w");
   setbuf(f, NULL);

   while (fgets(s, 100, stdin))
      fputs(s, f);

   return 0;
}

或

#include <stdio.h>

int main(void)
{
   char s[100];

   FILE *f = fopen("test.txt", "w");

   while (fgets(s, 100, stdin)) {
      fputs(s, f);
      fflush(f);
   }

   return 0;
}

【讨论】:

  • +2,但这是不可能的,所以只能+1。
【解决方案2】:

我不知道你是否不能禁用缓冲区,但你可以使用fflush强制它写入磁盘

关于它的更多信息:(C++ 参考,但与 C 中的相同): http://www.cplusplus.com/reference/clibrary/cstdio/fflush/

【讨论】:

  • 您引用的是 C++ 标头,尽管问题标有 C。
  • @Beginner:完全一样的东西..但我猜你是对的,我会添加警告
  • 这不是...相信我:) 更好地参考 POSIX 标准。但实际上删除你的答案会更好,就像我用我的一样......@AusCBloke 给出了一个完整的答案。
  • @Beginner 是一样的,至少在这种情况下,尤其是因为:C++ : Reference : C Library : cstdio (stdio.h) : fflush
  • @AusCBloke 我只是觉得这具有误导性(因为那里有 C++)。这个参考会更好我认为pubs.opengroup.org/onlinepubs/007904875/functions/fflush.html 该链接包含cstdio 这与string.h 不同。
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2012-05-14
  • 2018-08-25
  • 1970-01-01
  • 2020-08-16
  • 2014-04-20
相关资源
最近更新 更多