2015-03-05 2 views
1

У меня возникли проблемы с перенаправлением stdout и stderr из фирменного двоичного кода.Командный выход (stdout, stderr) не перенаправлен на трубу

После некоторого «обратного проектирования» с инструментом strace я нашел странный ioctl-вызов в дескрипторе stdout.

Может ли кто-нибудь объяснить мне, что это значит?

ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 
+1

также делает этот звонок, когда подается по трубопроводу? это может быть тестирование, чтобы узнать, находится ли STDIN STDOUT на tty. – Skaperen

+0

Да, это называется – Dcow

+0

Это вызвано, но если процесс передан по каналам, ioctl возвращает «= -1 ENOTTY (несоответствующий ioctl для устройства)» (istead «= 0»), после чего запись в stdout не происходит ... Ну, спасибо , теперь я понимаю, что происходит. Могу ли я обмануть procces или любым другим выходом перенаправления trick в файл? – Dcow

ответ

0

Нет ничего странного в этом. Он просто получает терминальные параметры, т. Е. Параметры /dev/pts/X устройства, поступающего от xterm.

От человека странице tcgetattr() (который так же, как TCGETS см man tty_ioctl):

tcgetattr() получает параметры, связанные с объектом упомянутого Ф.Д. и сохраняет их в структуре termios, на которую ссылается termios_p. Эта функция может быть вызвана из фонового процесса; однако атрибуты терминала могут быть впоследствии изменены процессом переднего плана.

+0

Я все еще не понимаю, как это влияет на std-потоки? Если я правильно понял, это только получить параметры от tty – Dcow

+0

Можете ли вы получить мне больше информации о третьем ioctl param? – Dcow

+1

@Dcow, Да, он получает параметры 'tty'. Третий параметр в вызове 'ioctl' является ioctl-зависимым. В случае 'TCGETS' ioctl это структура' termios', которая содержит различные флаги, описывающие терминал: в вашем случае его _38400_ - это скорость в бит/с, _echo_ означает, что tty показывает входные символы и т. Д. – myaut

Смежные вопросы