Знатооки юникса help
Если он его пишет через write, то размер файла увеличивается точно такими же кусками, какими он передаётся функции write. В этом случае скорее всего изменить ничего нельзя. Если используется fwrite, то запись идёт блоками, причём размер блока по умолчанию задаётся где-то в недрах libc.so. В этом случае можно попробовать подсунуть свой собственный libc.so... В любом случае требуется длительная и кропотливая работа.
а если через shell писать - то там какой механизм? типа результаты в файл перенаправлять через > ?
перепиши write на уровне ядра и статически задай размер блока
Это не поможет. Если прога формирует блок на 30Kb, а потом записывает его одним writeом, то никакое переписывание write не поможет этот размер изменить...
В этом случае для конкретного процесса файловый дескриптор номер 1 (stdout) указывает не на терминал, а на тот файл, в который перенаправлены результаты. А какого размера блоками писать в этот файл -- это уже зависит от программы (или опять же от libc). То есть shell перенаправляемые данные через себя не пропускает и следовательно влиять на размер блоке не может.
Может не в тему, но для таких случаев я бы посоветовал посмотреть исходники. Если нет - то strace/ltrace на предмет вызывов read/write.
Оставить комментарий
vertyal17
Вот вобщем когда файл записывается на диск, он записывается не непрерывнно, а некоторым размером буфера сразу. (Типа был файл 0 байт потом резко сразу 30000 байт и т.д например)Как можно этот размер регулировать? Требуется выставить его поменьше, чтобы чаще записывал помаленьку.
Файл передается по протоколу gsiftp в интернете, на на диск пишет его скорее всего какойто процесс, скорее всего он его записывает по проостому через write(..,..,..) но внутрь этого процесса доступа нет, т.е. измеенить его код нельзя(если ктот скажет чтобы в том процессе вызвать какой-нибудь setbufsize)
Задача, посчитать скорость передачи у меня, а поскольку скорость очень маленькая, то это будет небольшая потеря что файл пишется помаленьку, зато можно более точно определить количество уже переданных байт.
Спасибо за ответ на прошлый вопрос.