LINUX.ORG.RU

пожалуй распишу более подробно
есть перловый скрипт
print.pl:
#!/usr/bin/perl

print "Hello world\n";
my $r = <STDIN>;

если вызывать через шелл
$./print.pl
то все нормально
если
$./print.pl > ./out
и на другой консоли сделать
$tail -f ./out
то Hello World выводится в файл только после того, как введу что-нить на клавиатуре и нажму ввод. А нужно что бы до этого.

Это все нужно для моей ситуации:
я делаю ./execve внутри дочернего процесса, предварительно подменив stdout и stderr на свои пайповые дескрипторы
и читаю вывод из родителя. В основном работает нормально, но в случае этого скрипта Hello World не выводится до ввода на клавиатуре.
Поэтому думаю тут проблема с буферизацией вывода
подскажите плиз если знаете.












Dead ★★★★
() автор топика

Никак, Linux 2.4 использует ровно одну страницу для pipe буфера.

Murr ★★
()

Вот еще пример:
[roland@main test]$ ./print.pl
Hello world
any_keyboard_word_and_enter
[roland@main test]$ ./print.pl | grep H
any_keyboard_word_and_enter
Hello world

Возможно но ведь если пишет на stdout то все в норме....
неужели там дескрипторы настоко разные?

Dead ★★★★
() автор топика

На крайний случай, может кто-нибудь подскажет как изменить этот скрипт, что бы оно работало через пайпы также как и без них.

Помогите, а то мне труба :(

Dead ★★★★
() автор топика
Ответ на: комментарий от Dead

У тебя буферизацией занимается не Linux, а Perl
попробуй добавить вначале:

use IO::Handle;

autoflush STDOUT 1;

Murr ★★
()

Спасибо Murr!
хотя бы так работает, но само по себе очень не желательно менять этот скрипт.

Dead ★★★★
() автор топика

>У тебя буферизацией занимается не Linux, а Perl
если это действительно так, то почему же тогда при запуске
$print.pl
Нормально все выводилось?
Или перл определяет, что собой представляет дескриптор на stdout?

Dead ★★★★
() автор топика

>Или перл определяет, что собой представляет дескриптор на stdout? Да

Пропусти его через strace и увидишь разный порядок вывода в stdout для файла и терминала (после вызова fstat).

Murr ★★
()

Еще раз спасибо за труд! :)
Поверю на слово :)

Dead ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.