【问题标题】:Printing to file from console从控制台打印到文件
【发布时间】:2011-04-16 17:44:52
【问题描述】:

我正在用 C 语言在 Linux 上编写一个程序,我无法使用 fprintf 打印到文件。我可以使用printf 在控制台中打印。如何获取控制台输出并将其写入文件。

我尝试了printf("echo whatever >> file.txt");,但我怀疑它没有运行。

谢谢

【问题讨论】:

  • system("echo whatever >> file.txt"); 应该可以,但是如果你不能使用fprintf,为什么你可以使用system ^^。

标签: c linux console printf


【解决方案1】:

运行程序时,将> file.txt 附加到它应该可以工作。

./program > file.txt

IIRC,将 STDOUT 重新路由到文件。

【讨论】:

  • 这似乎是我正在寻找的解决方案。它创建文件,但似乎没有写入文件。我正在运行的程序有一个参数,所以我应该在 arg 之前还是之后使用它?我都试过了,但都无济于事......
  • 您要打印什么?
【解决方案2】:

您正试图让您的程序输出一些文本,并让 shell 将输出评估为命令。

这很不寻常,通常会将生成文本的职责分离给程序,然后让 shell 将该输出重定向到文件:

foo.c 包含:

...
printf("whatever");
...

然后运行您的程序并将标准输出重定向到您喜欢的任何位置:

$a.out >> file.txt

【讨论】:

    【解决方案3】:

    像这样编译并运行你的程序

    ./program > lala.txt
    

    这会将您所有的printf()“推送”到lala.txt

    【讨论】:

      【解决方案4】:

      您可以freopendup2如下:

      #include <unistd.h>
      #include <fcntl.h>
      int main(int argc, char *argv[])
      {
          int f = open("test.txt", O_CREAT|O_RDWR, 0666);
          dup2(f, 1);
          printf("Hello world\n");
          printf("test\n");
          close(f);
          return 0;
      }
      

      【讨论】:

        【解决方案5】:

        您可以freopen stdout 流。

        #include <stdio.h>
        
        int main(void) {
          if (freopen("5688371.txt", "a", stdout) == NULL) {
            /* error */
          }
          printf("Hello, world!\n");
          return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-06
          • 2021-06-05
          • 2021-11-16
          • 2020-07-05
          相关资源
          最近更新 更多