Я должен поставить новый ответ, даже если мой комментарий завершает ответ только на thiagowfx , потому что в комментариях нельзя делать отступы для кода.
Содержимое vim.desktop может быть примерно таким:
[Desktop Entry]
Name=Vim Text Editor
Comment=Edit text files
Exec=vim
Terminal=true
Type=Application
Icon=terminal
Categories=Utility;TextEditor;
StartupNotify=true
MimeType=text/plain;
Я предпочитаю помещать его в папку ~ / .local / share / applications
.
Вы можете использовать ioctl(,FIONREAD,)
для каналов в Linux, чтобы получить текущее количество байтов, доступных для чтения. Это можно найти в man 7 pipe
(FIONREAD
, а также в man tty_ioctl
). Вы можете либо интегрировать это в свое приложение, либо запустить параллельно с ним что-то вроде этого фрагмента Perl, используя канал как стандартный ввод:
#!/usr/bin/perl
# https://unix.stackexchange.com/a/440361/119298
use strict;
require 'sys/ioctl.ph';
my $v = pack("l",0);
$| = 1;
# while(1)
{
die "ioctl: $!" if ioctl(STDIN, &FIONREAD, $v)!=0;
my @r = unpack("l",$v);
printf "%d ",$r[0];
# sleep 1;
}
Таким образом, использование будет
node foo.js | (myperl & node bar.js)
Попробуйте что-нибудь вроде
while sleep 1;do date;done |
while sleep 1.1;do myperl 2>/dev/null; dd status=none count=1 bs=20;done
Я получаю предупреждения от perl
о _FORTIFY_SOURCE
, отсюда и перенаправление stderr. dd
читается меньше, чем длина date
, поэтому вы можете видеть, что результат постепенно увеличивается.
Для полнотывы можете получить пропускную способность канала с помощью fcntl(,F_GETPIPE_SZ)
и установить его с помощью fcntl(,F_SETPIPE_SZ,newvalue)
до /proc/sys/fs/pipe-max-size
(, если нет root илиCAP_SYS_RESOURCE
). См. man fcntl
.