Просто попробуйте использовать его. Если он есть, и вы можете его выполнить, это сработает. Если это не так, это не так, и вы можете понять, почему в errno
.
Причина, по которой вы не пытаетесь проверить заранее, двояка, и она совпадает с файлами, как с исполняемыми файлами. Во-первых, вы можете ошибаться. Многие люди ошибаются, проверяя, существует ли файл , а затем задается вопросом, почему его открытие не удается. Они забыли проверить, читается ли это. Не нужно дублировать все эти проверки, просто попробуйте открыть его и посмотреть.
Во-вторых, он приглашает race condition. Например, предположим, что у вас есть два процесса, работающих над одним и тем же файлом. Время движется вниз.
Process 1 Process 2
Check if file is readable.
It's readable!
Make the file unreadable.
Open that file.
File fails to open.
Это очень простой пример, есть намного более плохие последствия для состояния гонки. Это иллюстрирует, что проверка того, может ли ресурс использоваться и использовать этот ресурс, должен быть atomic: он должен произойти в одной единственной бесперебойной работе.
Избегайте popen
и system
, где вы можете. Они запускают команду через оболочку, которая предлагает дыры безопасности и непреднамеренные последствия не буквенно-цифровых символов. Вместо этого используйте одну из функций exec[lv]p
, которая будет искать PATH
для исполняемого файла без вызова оболочки.
Если вы знаете путь к команде, почему бы просто не выполнить 'stat' и посмотреть, является ли он исполняемым? – codeforester
Дубликат [отправка электронной почты с помощью программы C/C++ в Linux] (http://stackoverflow.com/questions/9317305/sending-an-email-from-acc-program-in-linux) –
CURL - еще одна хорошая способ отправки электронной почты. –