Можно ли сохранить переменную внутри и прочитать / записать ее после завершения работы программы?
Я искал некоторое время без надежды. По сути, мне было интересно, можно ли сохранить переменную и прочитать ее внутри исполняемого файла после выхода из программы.
Я знаю, что можно использовать функцию fstream для хранения переменной во внешнем файле, но я ищу способ сохранить ее внутренне, как в.exe.
string l;
cin >> l;
// function to save it internally.....
Заранее спасибо oO
2 ответа
Вот несколько советов о том, почему это не очень хорошая идея.
- Это не лучше, чем использование другого файла.
- Вы не можете получить доступ к большому блоку памяти как "все мои данные" и записать его в файл, поэтому вам придется правильно сериализовать / десериализовать. Если у вас есть этот код, то на самом деле больше сложного заняться сложным форматом файла (будь то ELF или PE), чем записать в пустой файл.
- Это на самом деле хуже.
- Ошибки в записи данных могут сделать вашу программу неработоспособной.
- Несколько пользователей не могут иметь свои собственные данные.
- Ваш исполняемый файл обычно не доступен для записи.
- В системах на основе Unix двоичные файлы обычно устанавливаются в системные каталоги, и обычный пользователь просто не может их изменить.
- Даже если вы работаете от имени пользователя root, системный раздел нередко доступен только для чтения (моя собственная настройка
/
например, монтируется только для чтения). - В системах Windows, хотя чаще используется с правами администратора, это не универсально, и, в любом случае, двоичный файл работающей программы заблокирован.
- Даже если вам удастся обойти все это, это предотвратит переносимость данных.
- Установка и обновление вашей программы и данных больше нет.
- Невозможно сделать резервную копию ваших данных и восстановить их позже (возможно, в другой системе).
- В те дни единственными программами, изменяющими исполняемые файлы, являются вредоносные программы. По этой причине перехват исполняемых программ, изменяющих исполняемые файлы, и их отключение является одной из основных функций антивирусного программного обеспечения.
- Кроме того, в системе, реализующей двоичный файл с подписью или любой другой тип системы доверия, ваш измененный двоичный файл не пройдет тесты на подпись.
Итак, множество причуд, множество сложных обходных путей как в вашей программе, так и в пользовательском опыте (необходимо запросить специальные разрешения, сложное сохранение и резервное копирование, очень вероятная потеря данных). С другой стороны, простое сохранение в файл данных легко реализовать и удобно для пользователя.
Как упомянуто @drescherjm и @Peter в комментариях, такая практика - это то, что ищет программное обеспечение безопасности, так что это не самая лучшая идея. Я не очень осведомлен о ваших намерениях, но если вы пытаетесь реализовать сопрограммы в своих программах, вот что вы можете сделать:
- Создайте статическую переменную, скажем
static int state=0;
и используйте это для реализации сопрограмм в масштабе времени жизни программы. - Используйте файл, скажем "Sys_Status.dat" для хранения информации этих переменных.