Печать в файл с консоли

#c #linux #console #printf

#c #linux #консоль #printf

Вопрос:

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

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

Спасибо

Комментарии:

1. system("echo whatever >> file.txt"); должно сработать, но если вы не можете использовать fprintf , почему вы могли бы использовать system ^^.

Ответ №1:

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

./program > file.txt

IIRC перенаправляет стандартный вывод в файл.

Комментарии:

1. Это похоже на решение, которое я искал. Он создает файл, но, похоже, не записывает в него. У программы, которую я запускаю, есть аргумент, так что мне использовать его до или после аргумента? Я пробовал оба варианта, но безрезультатно…

2. Какую печать вы пытаетесь выполнить?

Ответ №2:

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

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

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

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

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

 $a.out >> file.txt
  

Ответ №3:

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

 ./program > lala.txt
  

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

Ответ №4:

Вы можете 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 worldn");
    printf("testn");
    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;
}