Собственно имеется у меня малинка c Raspbian'ом, которая тащит некое оборудование и получает с него данные. Данные пишутся в текстовые файлы. Сбор данных осуществляется самописной программой на С/С++. Кроме того, программа тянет из внешней сетевой базы данные и тоже пишет их в файлы. Файлы тянутся программой, написанной на Фортране. Далее эти данные подхватывают скрипты, рисуют красивые графики и т.п..
И в обеих программах в случайные моменты времени наблюдается одинаковый баг - вместо ожидаемой строки в файл падает пачка нулевых байтов длинной с ожидаемую строку (+/- один символ), а потом уже пишется ожидаемая строка. Соответственно скрипты находят в строке нули и графики резко становятся некрасивыми.
Соответственно вопрос: что вообще тут происходит? Ошибка не в программах, поскольку они написаны на разных языках и не имеют ничего общего. Ошибка не в исходных данных, поскольку они берутся из принципиально разных источников. Операционная система? Но где и как она влияет на запись в файлы?
До этого всё это дело крутилось на х86 ноутбуке под Windows. Программы были те же, только откомпилированные Visual Studio и Intel Fortran (сейчас же gcc и gfortran соответственно). Работало долго. Подобных проблем с выводом в файлы замечено не было.
Система Raspbian, ядро 3.10.25+
Файловая система ext4 с вкраплением vfat для раздела с конфигами самого raspberry и cifs для подключённой в виде папки внешней базы данных.
Системная кодировка koi-8. Программы соответственно используют системную кодировку.
@WildHorn Вообще странно. Только вчера похожую систему отлаживал. Тоже Малина, тоже дебиан. Источник клал в папку файлик а мой велосипед забирал ее. По сути аналог команды tail -f _file_, написан велосипед на питоне. Есть небольшая латентность связанная с буферезированием самой системой, но чтобы данные приходили битые.... Такого не наблюдается. Работает уже 34 часа багов не замечено.
Попробуйте провести эксперимент с tail -f * в момент создания и записи файлов, будут ли наблюдаться нулевые строки.
Просто если это было бы железо, то врядли сама система могла бы функционировать с такой багой. Скорее особенности буферизирования и кеширования fs тут имеет место быть.