Исходя из предположения, что в начале выполнения приложения у вас есть доступ к файлу, открытие дескриптора к нему должно препятствовать стиранию файла операционной системой на диске до тех пор, пока не будет закрыта последняя ссылка на файл.,Это позволит вам без труда искать файл, используя этот дескриптор файла.
Создать глобальную переменную:
int app_fd;
Процесс для большинства из них одинаковв основной процедуре просто введите:
app_fd = open(argv[0], O_RDONLY);
в начале выполнения.Когда дело доходит до того момента, когда вам нужно получить доступ к zip-файлу, просто используйте дескриптор файла, а не имя файла.
Во время выполнения, если у вас нет какой-либо формыОбращайтесь к исходному содержимому приложения, тогда вы, вероятно, не сможете получить доступ к содержимому zip-файла.Это связано с тем, что загрузчик отображает только те разделы файла, которые ожидаются.Содержимое в конце двоичного файла будет считаться мусором, а не отображаться в нем.
Чтобы выполнить сопоставление zip-файла с памятью, вам нужно будет придерживаться другой тактики.Вам нужно будет вставить .zip в раздел ELF (linux) / COFF (Windows) / Mach-O (Mac OS X) бинарного файла, свойства которого установлены так, чтобы он гарантированно отображался в приложении (для этого требуетсямного предварительной работы в приложении и много дополнительной обработки в процессе обработки).Это не тривиально, и, вероятно, включает в себя довольно много кода, чтобы сделать его правильным для каждой из платформ.
Кроме того, нетрудно удалить приложение из системы Windows во время его работы (Я думаю, что вы можете переместить его, если он находится на NTFS, хотя).