The OpenNET Project / Index page

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




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

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

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

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

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

  • Не работает дескриптор стандартного ввода, !*! ACCA, 07:39 , 06-Май-11 (3)
    > 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 из списка.




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

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