Perl - проверить, является ли дескриптор файла стандартным - PullRequest
3 голосов
/ 03 марта 2011

Я использую select с TCP-сервером.Я хочу добавить STDIN в выбранный набор файловых дескрипторов.

#!/usr/bin/perl

use IO::Select;
use IO::Socket::INET;
my $sock = IO::Socket::INET->new(LocalPort => $serv_listen_port, Proto => 'tcp', List    en=> 1);

my $s = IO::Select->new();
$s->add(\*STDIN); #want to be responsive to user input (allow me to type commands for example)
$s->add($sock);

@readytoread=$s->can_read(1); #timeout = 1sec
foreach $readable (@readytoread) {
  if ($readable==$sock) {
    #This was a listen request, I accept and add new client here
  }
  if ($readable == STDIN){ #what to do on this line?
    #This is user typing input into server on terminal
  }
}

Нужна помощь с 4-й до последней строки в коде здесь.

Ответы [ 2 ]

5 голосов
/ 03 марта 2011
$readable->fileno == fileno STDIN

Или, если вам это удобно, fileno STDIN равен нулю, что вы можете проверить напрямую.

2 голосов
/ 04 марта 2011

can_read возвращает точное значение, переданное add, поэтому вы можете просто использовать

$readable == \*STDIN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...