Perl вводит один символ из стандартного ввода

не может заставить его работать с ядром 4.19 и форматом LUKS 2 . userland может читать/записывать GPT на /dev/mapper/${name}, но partprobe| partx| blockdev| hdparmвсе не могут предоставить ядру внутренний GPT LUKS.

0
24.11.2021, 00:12
1 ответ

Вы можете сделать это с базовым дистрибутивом perl, не нужно устанавливать дополнительные пакеты:

use strict;
sub IO::Handle::icanon {
        my ($fh, $on) = @_;
        use POSIX;
        my $ts = new POSIX::Termios;
        $ts->getattr(fileno $fh) or die "tcgetattr: $!";
        my $f = $ts->getlflag;
        $ts->setlflag($on ? $f | ICANON : $f & ~ICANON);
        $ts->setattr(fileno $fh) or die "tcsetattr: $!";
}

# usage example
# a key like `Left` or `á` may generate multiple bytes
STDIN->icanon(0);
sysread STDIN, my $c, 256;
STDIN->icanon(1);
# the read key is in $c

Чтение только одного байта может быть плохой идеей, потому что это просто оставит мусор, который будет считан позже при нажатии клавиши, такой как Leftили F1. Но вы можете заменить 256на 1, если хотите, несмотря ни на что.

3
24.11.2021, 01:29

Теги

Похожие вопросы