Перенаправление не работает - PullRequest
0 голосов
/ 04 ноября 2011

Я хочу поместить вывод моей программы в файл.Я набрал следующее:

./prog > log 2>&1

Но в файле ничего нет "log" .Я использую Ubuntu 11.10 и оболочкой по умолчанию является bash.

Кто-нибудь знает причину этого И как я могу отладить это?

1 Ответ

3 голосов
/ 04 ноября 2011

Есть много возможных причин:

  • Программа читает входные данные из файла log, пока вы пытаетесь перенаправить в него с усечением (см. Почему не работает "sort file1> file1"? )
  • Вывод буферизуется, так что вы не видите данные в файле, пока буфер вывода не будет очищен. Вы можете вручную вызвать fflush или вывести std::flush при использовании потока ввода-вывода C ++ и т. Д.
  • Программа достаточно умна и отключает вывод, если выходной поток не является терминалом.
  • Вы смотрите не на тот файл (то есть в другой каталог).
  • Вы пытаетесь сбросить содержимое файла неправильно.
  • Ваша программа выводит '\ 0' в качестве первого символа, поэтому вывод кажется пустым, хотя некоторые данные есть.
  • Назовите свое имя.

Лучше всего запустить это приложение в отладчике (например, gdb) или использовать strace или ptrace (или оба) и посмотреть, что делает программа. Я имею в виду, действительно, перенаправление вывода работает в течение последних 40 лет, поэтому проблема должна быть в другом месте.

...