#c #executable
#c #исполняемый
Вопрос:
Я пишу программу, работающую с каталогами и файлами. Эта программа собирается открыть все доступные каталоги и прочитать все доступные файлы по вводимому пользователем начальному пути.
Вопрос в том, что если программа открыла запущенный исполняемый файл, я получу ошибку seg, мне интересно, есть ли какой-либо способ исключить исполняемый файл, который запущен, но включает все остальные файлы? Учитывая условие, что программа знает имя исполняемого файла, но не знает, где будет находиться исполняемый файл, и начальный путь
Комментарии:
1. Почему вы считаете, что открытие файла программы текущей программы вызывает ошибку segfault?
2. У вас вообще не должно быть этой проблемы, даже если это тот, который вы выполняете. Если вы получаете ошибку segfault, с вашим кодом что-то не так.
3. Групповой чат вашего класса предоставляет неточную информацию. Я рекомендую вместо этого попробовать авторитетную документацию.
4. Нет, этого не произойдет. Как я уже сказал, у вас что-то не так в вашем коде, если вы получаете ошибку segfault.
5. Пока вы открываете его только для чтения. Если вы откроете его для записи, это приведет к усечению файла и вызовет ошибку.
Ответ №1:
Чтобы устранить проблему, проверьте возвращаемое значение fopen()
. Если вы не можете открыть файл, он возвращается NULL
и вводит причину errno
. Вы можете получить строку сообщения об ошибке с strerror()
помощью . Рассмотрите возможность использования perror()
для вывода сообщения об ошибке при циклическом просмотре файлов.
Есть и другие возможности, например, не обрабатывать действительно длинные строки, но это, безусловно, наиболее вероятная проблема.
Это не приводит к получению исполняемого файла, но устраняет общую проблему segfault, с которой вы столкнулись, что в любом случае гораздо разумнее сделать.