• Linux ? programming ну общим, я как-то вообще не секу в программировании под линуксы, потому может вопрос будет немного некорректным. Хочется создать "файл" что бы один процесс его иногда обновлял, и все остальные могли читать. Интересно, как а) сделать это при том что диск ридонли (все надо делать как-то в памяти) и б) решить проблебы конкуренси... Ссылки приветствуются, но еще больше, обьяснения.

Replies (24)

  • @Shchvova, какие тут могут быть проблемы concurrency?
  • @4DA, ну, моя програмка пишет, в то же время кто-то читает и получает что-то недописанное...
  • @Shchvova, но я все еще не понимаю как сделать что-то что будет доступно как файл :(
  • @Shchvova, НЯЗ, posix ipc и system V ipc реализуют некий message queue, но вот сообщение изымается из очереди, а это не то, что тебе нужно. Кстати, можно ли поднять какую-нибудь tmpfs в системе и там создать этот файл?
  • @4DA, вообще не очень :( у меня там очень маленький линукс. Наверное, запощу проблему в другой тред. вдруг кто найдет решение лучше моего.
  • @Shchvova, можно создать кусок общей памяти и туда писать/читать. семафор разместить можно в первом машинном слове этого куска. гугли по shmat, shmctl, shmget и mmap. вот, вроде, неплохой туториал: google.com
  • @Shchvova, свое решение ты не привел!
  • @4DA, спасибо. Я все таки напишу проблему полностью, вдруг есть более нормальные идеи вообще. Пока что решения у меня нету
  • @vt, вообще есть такая фишка: можно запустить процесс, который будет мультиплексировать данные в несколько пайпов, ща погуглю.
  • @4DA, запостил к чему это все. Я вообще не уверен что мне такое нужно...
  • @4DA, переизобретаешь бд? ;)
  • @vt, какой там бд ) У меня у всей машины 4мб памяти
  • @Shchvova, ну так и чем sqlite in-memory не подходит?
  • @vt, эм... А если я открою ":memory:" из двух разных процессов, это будет одна и та же база данных? Оо
  • @Shchvova, если у тебя достаточно новый баш ты можешь направить вывод процесса в stdin нескольких других процессов при помощи утилиты tee. например: pastie.org . вот кто-то на SO интересовался: stackoverflow.com . Соответственно клиенты просто ждут ввода со stdin и все ОК. Сервер вызывается вышеуказанным образом со
  • @4DA, ... списком процессов-клиентов.
  • @4DA, Надо обдумать. Читал мой новый пост?
  • @Shchvova, пост не читал @ сразу отвечал :) о, робот, круто!
  • @4DA, ВНЕЗАПНО открыл для себя mkfifo
  • @Shchvova, у тебя же ридонли там все.
  • @4DA, а они на файловой системе? Ну, оно вообще не ридонли. Просто в него не нужно писать\
  • @Shchvova, энивей. Сейчас все на пайпах забабахаю )))
  • @Shchvova, хотя не, ну его нафик. Тупо сделаю сокеты, просто, тормознуто, но работает )))