Постоянное хранение через несколько прогонов - PullRequest
2 голосов
/ 12 мая 2011

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

Скажем, у меня есть класс foo (), который хранит целые числа. Из main () я хочу вызвать метод, который добавляет целое число, и класс не забывает о своем прежнем содержимом.

//
// Data storage accross different runs
// This should go into the daemon process
//

#include<iostream>
#include<list>

using namespace std;

class foo {
public:
  foo(int add): add(add) {}
  void store(int i) {
    vec.push_back( i + add);
  }
private:
  list<int> vec;
  int       add;
};

Основная функция должна проверять уже запущенный демон - если не запускает его.

//
// Main program. Should check whether daemon runs already, if not starts it.
//

void main(int argc, char *argv[]) {

  // if (daemon is not running)
  //  start daemon( some_number )

  // call daemon::add( atoi(argv[1]) );
}

Как лучше всего это сделать с общими библиотеками или с процессом-демоном? Программа хранения и вызывающая программа находятся на одном хосте Linux.

Ответы [ 3 ]

0 голосов
/ 12 мая 2011

Именованные трубы - это один из способов.Если вы хотите неблокировать, вы можете попробовать маршрут очереди сообщений.Вот ссылка на один из системных вызовов http://linux.die.net/man/2/msgctl,, на который вы можете посмотреть другие вызовы.

0 голосов
/ 12 мая 2011

Может рассмотреть http://en.wikipedia.org/wiki/Memcached

0 голосов
/ 12 мая 2011

Посмотрите на Linux Pipes для межпроцессного взаимодействия.

http://linux.die.net/man/2/pipe

...