LINUX.ORG.RU

буферизация выходного потока в файл

 , , ,


0

1

Помогите разобраться, буферизируется ли перенаправление в файл? Например, echo «$N» > file? Или выход sed, awk...

есть подозрение что echo точно не буферизируется а сразу записыывается на диск, а ведь жалко железо если по сто раз перезаписывать. Есть ли способы задействовать буфер принудительно?

Ответ на: комментарий от WRG

что это? я в такие тонкости не вникал еще? куда нужно лезть?

Reset82
() автор топика

Единственное что делает такой синтаксис в shell (>somewhere) -- это переоткрывает дескриптор в новом процессе (а также обнуляет длину файла somewhere). shell дальше не участвует, и нужно смотреть конкретный процесс и ФС, на которой открыт fd. Например, процесс может поумничать и попытаться определить, что нужный fd открыт на tty или на файле, а может и не попытаться. ФС смотря как смонтирована, может буферизовать, а может и не буферизовать.

d_a ★★★★★
()
Ответ на: комментарий от d_a

Спасибо за пояснение! Я правильно понимаю, что у файловой системы и у самого диска должен сучествовать собственный буфер, и этот буфер периодически скидывается на диск. То есть к fd могут обращаться разные процессы а массив при этом будет находится в буфере если это позволяет сама система?

Reset82
() автор топика
Ответ на: комментарий от Reset82

Ну да, вы наверное могли видеть некоторых деятелей, которые советуют флешку с опцией sync монтировать, это оно и есть.

d_a ★★★★★
()
Ответ на: комментарий от d_a

Спасибо! Тему считаю закрытой. Все ясно :)

Reset82
() автор топика

Прямой ответ на поставленный вопрос — sponge. cat "$N" | sponge filename. Он делает именно то, чего ты хочешь — принимает весь стандартный ввод и потом за один раз пишет его в файл. Иногда это действительно требуется. Но не для замены стандартной буферизации.

Но он тебе не нужен. Буферизация существует на уровне файловой системы и ОС. Всё уже решено и оптимизировано за тебя. Более того, буфер есть ещё и у самого носителя. Так что ты пытаешься решить несуществующую проблему.

Psych218 ★★★★★
()

поиграться с /proc/sys/vm/dirty_*

teod0r ★★★★★
()
Ответ на: комментарий от Psych218

Он делает именно то, чего ты хочешь — принимает весь стандартный ввод и потом за один раз пишет его в файл.

Не очень идея, а если память у него раньше кончится, что он делать будет?

d_a ★★★★★
()
Ответ на: комментарий от d_a

Не очень идея, а если память у него раньше кончится, что он делать будет?

Не проверял. Обычно он пригождается для всё же на несколько порядков меньших объёмов, чем свободная память ☺

Psych218 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.