#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;
}