2016-05-23 4 views
2

Создал виртуальный файловый драйвер, который принимает входные данные из файла. Этот вход сохраняется внутри (помимо других событий) и записывается на доступ к файлам чтения.Как ничего не писать в виртуальный файл

Теперь, когда я пишу пустую строку или блок данных в этот файл, кажется, что обработчик записи не вызывается. Это не имеет смысла с первого взгляда, но на втором есть. Посмотрите на

echo -n "" > somefile 

это очищает содержимое файла. Мне нужно то же самое для виртуального файла, потому что я хочу сказать драйверу «Эй, теперь больше нет данных для вас».

Есть ли у меня шанс вызвать обработчик записи с пустой информацией?

Отправка определенной escape-последовательности не является опцией, потому что данные двоичные, и я не могу назначить значение, которое будет считаться «пустым».

ответ

2

Во-первых, это может быть плохой вкус, чтобы добавить двоичный файл псевдо-файлов в /proc/. Считаете ли вы их составление текстовым, как и большинство псевдофайлов в /proc/? Дополнительные накладные расходы на разбор некоторых текстовых псевдофайлов чаще всего незначительны (и системному администратору очень нравится иметь текстовые псевдо-файлы в /proc/, которые могут быть , читайте без значительных побочных эффектов).

Тогда вы можете использовать системный вызов ftruncate(2) (но я не знаю, работает ли он на /proc/ псевдофайлах). Вы будете затем использовать truncate(1) команду вроде:

truncate /proc/your_weird_pseudo_file 

Возможно, что может не работать (я понятия не имею, если PROCFS файловая система поддерживает это)

В качестве альтернативы (но это некрасиво), обеспечивают другой pseudo file, чтобы очистить определенное состояние, поэтому ваш пользователь будет делать:

echo 1 > /proc/clear_your_weird_state 
+0

Да, я знаю о «вкусе». То, что я делаю, - это то, что можно использовать в приложениях, в которые можно помещать любые данные. Другие «файлы» в этом каталоге предоставляют информацию в текстовом формате, но я не хочу ограничивать данные полезной нагрузки там. Это ядро ​​Android, нет усечения. – Droidum