Печать в файл из консоли - PullRequest
0 голосов
/ 16 апреля 2011

Я пишу программу для Linux на C, где я не могу использовать fprintf для печати в файл. Я могу использовать printf для печати в консоли, хотя. Как я могу взять вывод консоли и записать его в файл.

Я пытался printf("echo whatever >> file.txt");, но, как я подозревал, он не работает.

Спасибо

Ответы [ 5 ]

2 голосов
/ 16 апреля 2011

При запуске программы добавьте > file.txt, чтобы она работала.

./program > file.txt

IIRC, перенаправляет STDOUT в файл.

1 голос
/ 16 апреля 2011

Вы пытаетесь заставить вашу программу выводить некоторый текст и для оболочки оценивать вывод как команду.

Это необычно, обычно нужно разделить обязанности генерации текста для программы, а затем позволить оболочке перенаправить этот вывод в файл:

foo.c содержит:

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

Затем запустите вашу программу и перенаправьте стандартный вывод куда вам угодно:

$a.out >> file.txt
0 голосов
/ 16 апреля 2011

Вы можете freopen или dup2 следующим образом:

#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;
}
0 голосов
/ 16 апреля 2011

Вы можете freopen поток stdout.

#include <stdio.h>

int main(void) {
  if (freopen("5688371.txt", "a", stdout) == NULL) {
    /* error */
  }
  printf("Hello, world!\n");
  return 0;
}
0 голосов
/ 16 апреля 2011

Скомпилируйте и запустите вашу программу вот так

./program > lala.txt

Это "подтолкнет" все ваши printf() к lala.txt

...