Size: a a a

2020 September 24

P

Pavel in Modern::Perl
А - тогда да
источник

SU

Someone Unknown 🇭🇷... in Modern::Perl
Дмитрий Лапчик
помогите разобраться с epoll/read? пишу на низком уровне, потому что планирую переписать код позже  на cpp. проблема такая. приходит событие EPOLLIN от epoll_wait на чтение из дескриптора (stdout запущенного в фоне процесса)
my $pid_in = open(my $pin,  "-|", $$prgs[0]) or die "Can't start in: $!";

читаю из дескриптора по событию
$bytes = read ($pin, $data, $BLOCKSIZE);

но вызов блокируется в ожидании чего-то. собственно вопрос почему он останавливается и что ему нужно? может он хочет считать $BLOCKSIZE байт из потока, а их там не хватает?
Если на низком, то sysread() надо
Может данных не хватать, да. Дескриптор блокирующий, он в этом случае встанет в read()
Можно через ioctl FIONREAD предварительно проверять количество данных в буфере
источник

AK

Andrey Konovalov in Modern::Perl
Pavel
ну или кстати посмотри $dbh->{Callbacks}
Спасибо, кажется, это как раз то, чего не хватает
источник

ДЛ

Дмитрий Лапчик... in Modern::Perl
Someone Unknown 🇭🇷
Если на низком, то sysread() надо
Может данных не хватать, да. Дескриптор блокирующий, он в этом случае встанет в read()
Можно через ioctl FIONREAD предварительно проверять количество данных в буфере
спасибо, попробую
источник

ДЛ

Дмитрий Лапчик... in Modern::Perl
Someone Unknown 🇭🇷
Если на низком, то sysread() надо
Может данных не хватать, да. Дескриптор блокирующий, он в этом случае встанет в read()
Можно через ioctl FIONREAD предварительно проверять количество данных в буфере
sysread() отрабатывает как положено без ожидания заполнения всего буфера, читает сколько есть
источник

ДЛ

Дмитрий Лапчик... in Modern::Perl
еще раз благодарю!
источник

AG

Anatolia Gr in Modern::Perl
Оскар
Что прям Text::CSV_XS не делает как нужно?
Представь да, оно не escap-ит \t, \n и undef
источник

AG

Anatolia Gr in Modern::Perl
т.е. для генерации данных, где этого нет ок, а если есть пиши сам
источник

AG

Anatolia Gr in Modern::Perl
В обратную сторону не проверял, но похоже будут некоторые проблемы
источник

ММ

Максим Максимов... in Modern::Perl
Anatolia Gr
Представь да, оно не escap-ит \t, \n и undef
все норм работает с Text::CSV, парсим .tsv и обратно результат туда же в .tsv
источник

AG

Anatolia Gr in Modern::Perl
подскажи опции
источник

ММ

Максим Максимов... in Modern::Perl
my $csv = Text::CSV->new ({
       binary    => 1, # Allow special character. Always set this
       auto_diag => 1, # Report irregularities immediately
       sep_char  => "\t"
   });
источник

ММ

Максим Максимов... in Modern::Perl
my $csv = Text::CSV->new(
       {
           binary       => 1,
           eol          => $/,
           sep_char     => "\t",
           always_quote => 1
       })
источник

AG

Anatolia Gr in Modern::Perl
а проверял на
$csv->print(\*STDOUT, [1, " !", "! !", "2\t3\n", "\\", undef, 42]);
источник

AG

Anatolia Gr in Modern::Perl
не увидел \t и \n
источник

ММ

Максим Максимов... in Modern::Perl
always_quote => 1
источник

ММ

Максим Максимов... in Modern::Perl
закроет кавычками, остальное заэкранирует
источник

AG

Anatolia Gr in Modern::Perl
разрывает строку и кавычки надо убрать
источник

AG

Anatolia Gr in Modern::Perl
"1"     " !"    "! !"   "2      3
"       "\"             "42"
источник

ММ

Максим Максимов... in Modern::Perl
короче копай в сторону параметров, там все работает, просто параметры надо задавать, перенос строки там тож задается
источник