Вам следует обратить внимание на системный вызов sendfile(2)
, который оптимизирует копирование данных из одного открытого файлового дескриптора в другой внутри ядра. Обратите внимание, что два файловых дескриптора не обязательно должны быть файлами на диске. Вы также можете использовать сетевой сокет.
Также обратите внимание на флаг O_DIRECT
при использовании с open(2)
в файле. Это позволяет читать/записывать без повторного копирования данных из буфера dma в пользовательский буфер, но вы должны выровнять свой буфер на странице или подобном и использовать кратные размеры страницы для длины.
hdparm -t --direct
может выполнять временные тесты с этим флагом.
Некоторые команды из пакета sg3_utils
, такие как sg_dd
, выполняют дисковый ввод-вывод на низком уровне -и также имеют параметры для O_DIRECT
.
В крайнем случае вы можете использовать программу "expect".
Вот простой пример использования expect с ssh:https://www.journaldev.com/1405/expect-script-ssh-example-tutorial