Возможно ли форсировать изменение запущенного объекта в файловой системе? Вопрос в том, возможно ли простым методом изменить файл запущенного процесса из самого процесса? При использовании ofstream, получаю такой вывод. Got an error openning self: `Text file busy` Попробовал кодint fd; fd = open (GlobalFilesystemPathToRunningObject.c_str(), O_RDONLY); std::cout << fd << std::endl; std::cout << flock(fd, LOCK_UN) << std::endl; std::cout << open (GlobalFilesystemPathToRunningObject.c_str(), O_RDWR) << std::endl; std::ofstream file(GlobalFilesystemPathToRunningObject.c_str(), std::ios_base::app); if (file.fail()) std::cout << "Got an error openning self: `" << std::strerror(errno) << "`" << std::endl; { file << data.c_str(); file.close(); } Безрезультатно.

3 Авг 2021 в 20:04
134 +1
0
Ответы
1

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

Вы можете попробовать изменить файл, открыв его с использованием специальных флагов, например O_RDONLY и O_RDWR. Однако в вашем примере вы пытаетесь сделать это в самом процессе, который уже открыл файл на запись, поэтому получаете ошибку "Text file busy".

Чтобы изменить файл, запущенный процесс, вам нужно использовать другой процесс или способ, например, завершить процесс, изменить файл и заново запустить процесс.

17 Апр в 13:43
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 172 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир