The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Не работает дескриптор стандартного ввода"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Не работает дескриптор стандартного ввода"  +/
Сообщение от Илья (??) on 02-Май-11, 17:39 
Добрый вечер!
У меня стоит следующая задача: написать скрипт, в течение работы которого происходит перенаправление потока ввода. В результате гугления нашёл информацию про создание дескрипторов файлов. Для пробы решил набрать следующую команду:
perl -ne 'open(STDIN, "passwd"); print $_;' test
Однако, несмотря на команду "open", выводится информация из файла test.
Прошу помочь с данной проблемой.
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Не работает дескриптор стандартного ввода"  +/
Сообщение от pavlinux (ok) on 02-Май-11, 19:52 
> Добрый вечер!
> У меня стоит следующая задача: написать скрипт, в течение работы которого происходит
> перенаправление потока ввода.

1. Для потоков используют каналы - pipe()

2. Для чтения из одного файла в другой используют чтение по строкам. (если прикалывает - по символам :))

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Не работает дескриптор стандартного ввода"  +/
Сообщение от NuINu (??) on 03-Май-11, 20:03 
> Добрый вечер!
> У меня стоит следующая задача: написать скрипт, в течение работы которого происходит
> перенаправление потока ввода. В результате гугления нашёл информацию про создание дескрипторов
> файлов. Для пробы решил набрать следующую команду:
> perl -ne 'open(STDIN, "passwd"); print $_;' test
> Однако, несмотря на команду "open", выводится информация из файла test.
> Прошу помочь с данной проблемой.

что бы этого небыло уберите название файла тест из командной строки. )
потом запустите вашу программу и наберите в консоли энтер а потом еще и еще. )

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Не работает дескриптор стандартного ввода"  +/
Сообщение от ACCA (ok) on 06-Май-11, 07:39 
> perl -ne 'open(STDIN, "passwd"); print $_;' test
> Однако, несмотря на команду "open", выводится информация из файла test.

Перепиши это без -n, чтобы было понятно, что ты наделал:


perl -e 'while(<>){ print(STDIN, "passwd"); print $_; }' test

<> - это не STDIN, а magic descriptor. Он станет читать STDIN, только если @ARGV был пуст перед первым использованием <>.

Сравни:


perl -e 'open(STDIN, "passwd"); print <>;' test

perl -e 'shift; open(STDIN, "passwd"); print <>;' test

man perlvar
man perlopentut. Обрати внимание на @ARGV = map { m#^\w+://# ? "GET $_ |" : $_ } @ARGV;

После такого ты сможешь
while (<>)
{
...
}

читать из <> страницы с URL из списка.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру