как исключить работающий исполняемый файл C

#c #executable

#c #исполняемый

Вопрос:

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

Вопрос в том, что если программа открыла запущенный исполняемый файл, я получу ошибку seg, мне интересно, есть ли какой-либо способ исключить исполняемый файл, который запущен, но включает все остальные файлы? Учитывая условие, что программа знает имя исполняемого файла, но не знает, где будет находиться исполняемый файл, и начальный путь

Комментарии:

1. Почему вы считаете, что открытие файла программы текущей программы вызывает ошибку segfault?

2. У вас вообще не должно быть этой проблемы, даже если это тот, который вы выполняете. Если вы получаете ошибку segfault, с вашим кодом что-то не так.

3. Групповой чат вашего класса предоставляет неточную информацию. Я рекомендую вместо этого попробовать авторитетную документацию.

4. Нет, этого не произойдет. Как я уже сказал, у вас что-то не так в вашем коде, если вы получаете ошибку segfault.

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

Ответ №1:

Чтобы устранить проблему, проверьте возвращаемое значение fopen() . Если вы не можете открыть файл, он возвращается NULL и вводит причину errno . Вы можете получить строку сообщения об ошибке с strerror() помощью . Рассмотрите возможность использования perror() для вывода сообщения об ошибке при циклическом просмотре файлов.

Есть и другие возможности, например, не обрабатывать действительно длинные строки, но это, безусловно, наиболее вероятная проблема.

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