2015-06-27 1 views
0

У меня есть один демон linux, который генерирует некоторые данные. Время от времени этот демон обновляет данные. Для простоты можно сказать, что у нас есть только один байт. Теперь я хочу, чтобы другие процессы имели доступ к этим данным и самым простым способом (по крайней мере для меня), чтобы сделать это, чтобы иметь какой-то медиа-посредник.Linux: что-то между файлом FIFO и драйвером устройства

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

Возможно ли иметь один файл, открытый из одного процесса для записи и из одного или нескольких процессов для чтения? И есть ли какой-то специальный тип файла, который создан для этой цели?

p.p. Я читал о файлах FIFO и драйверах устройств, но я не уверен, что они должны их использовать.

+0

Вместо того чтобы взломать протокол синхронизации между процессами и протокол обмена сообщениями для этого, вам может потребоваться изучить DBus. –

ответ

0

Что? Ваши требования недостаточно указаны.

Во-первых, что мешает вашим читателям видеть данные при его обновлении?

Одной из возможных возможностей использования является блокировка файлов сообщений (поддержка общих и эксклюзивных режимов). Читайте о стае.

Другое стандартное решение - создать новый файл, а затем переименовать (2) его в старый. Операция является атомной.

Читатели, которым удалось открыть старый файл, конечно, прочитают ваши старые данные, но вы не предоставили никакой синхронизации, поэтому в любом случае это было неотъемлемо. (И на самом деле, вероятно, достаточно racy даже с замками.) Чтение процессов open + read + закрытие файла каждый раз, когда они хотят получить новые данные.

Можно также взломать файл, чтобы просмотреть счетчик ссылок на индекс. Если это 0, вы знаете, что файл удален, и есть обновление. Проблема возникает, если джокер жестко привязывает старый файл, так как это приведет к пропуску обновлений.

 Смежные вопросы

  • Нет связанных вопросов^_^