Возможно ли проверить существование файла на СИ, без попытки его открытия с помощью функции open()? Или обязательно его открывать, а потом смотреть - произошла ли ошибка? Хотелось бы как правильно... ;-)
После неудавшегося открытия файла - следует ли его закрывать? Какие последствия от неправильного действия? А что будет если наоборот, прозойдёт return из функции до его закрытия?
1. Наличие проверяется
if ( access( file, F_OK ) == 0 )
man access, короче.
2. Суть процедуры закрытия, по большому счету, для БУФЕРИЗОВАННОГО i/o, заключается в сбросе на диск файлового буфера. Если файл не закрыть или не сделать из программы flush перед return'ом, то все что осталось в буфере потеряется. Злоупотреблять флушами тоже не стоит - это ОЧЕНЬ медленная с т.з. процесса исполнения операция.
>1. Наличие проверяется
>if ( access( file, F_OK ) == 0 )Строго говоря access() проверяет не только наличие файла как
такового, но еще и прав доступа к нему - проще воспользоваться
функцией stat()
Обычно делают кто как привык. Иной раз типа
if (!fopen(...)) ; else fclose(..)
достаточно. Вопрос необходимости, как всегда зависит от контекста.
man 2 stat