Установка и получение значений из файла конфигурации - PullRequest
1 голос
/ 28 июня 2010

Я использую язык C и Linux в качестве моей платформы программирования.

В моем примере приложения.Я хочу получить и установить значение пользовательского файла конфигурации.Ниже приведена структура моего конфигурационного файла.

idlevalue=5
sleeping=1

Теперь моя проблема в том, что мне трудно думать о том, как реализовать установленные функции в моем приложении.все содержимое файла.Затем установите положение указателя в определенном значении, затем измените значение.Затем снова запишите все данные в файл.

Кажется, установить значение в файле конфигурации гораздо сложнее, чем получить.

Пожалуйста, совет.

Ответы [ 4 ]

2 голосов
/ 28 июня 2010

РЕДАКТИРОВАТЬ: я удалил "не рассматривать как базу данных", понимая, что вы концептуально относитесь к этому ... Идея состоит в том, чтобы иметь API поверх файла конфигурации:)

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

Примерно такбыло бы хорошо:

char *config_file_path = "/foo/bar.conf";
struct config {...} myconfig;
read_config(config_file_path, &myconfig);
// set a value
myconfig.somevalue = 5;
// When re-writing, routine simply over-writes the entire file.
write_config(config_file_path, &myconfig);

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

2 голосов
/ 28 июня 2010

Есть другие тесно связанные вопросы по SO .

Существуют библиотеки, такие как libconfig , которые обрабатывают подобные вещи для вас.

1 голос
/ 28 июня 2010

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

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

1 голос
/ 28 июня 2010

Конечно, самое сложное в том, что данные, которые вы хотите заменить, могут не совпадать с размером данных, которые вы хотите заменить.

Обычное решение, особенно для простого файла конфигурации, этопросто выписать полную новую копию файла конфигурации из памяти, содержащую все настройки.Вы создаете новый файл под временным именем, записываете в него конфигурацию, вызываете fsync(), чтобы синхронизировать его с диском, а затем rename() поверх старого файла конфигурации.(Эта процедура означает, что вы не получите поврежденный файл конфигурации, даже если во время записи файла конфигурации произойдет сбой вашего приложения или компьютера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...