URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 809
[ Назад ]

Исходное сообщение
"Мелочь в программировании на СИ..."

Отправлено Alexander , 26-Июн-02 15:50 
Возможно ли проверить существование файла на СИ, без попытки его открытия с помощью функции open()? Или обязательно его открывать, а потом смотреть - произошла ли ошибка? Хотелось бы как правильно... ;-)

Содержание

Сообщения в этом обсуждении
"Ещё одна мелочь в программировании на СИ..."
Отправлено Alexander , 26-Июн-02 15:59 
После неудавшегося открытия файла - следует ли его закрывать? Какие последствия от неправильного действия? А что будет если наоборот, прозойдёт return из функции до его закрытия?

"RE: Ещё одна мелочь в программировании на СИ..."
Отправлено Арлекин , 26-Июн-02 17:35 
1. Наличие проверяется
if ( access( file, F_OK ) == 0 )
man access, короче.
2. Суть процедуры закрытия, по большому счету, для БУФЕРИЗОВАННОГО i/o, заключается в сбросе на диск файлового буфера. Если файл не закрыть или не сделать из программы flush перед return'ом, то все что осталось в буфере потеряется. Злоупотреблять флушами тоже не стоит - это ОЧЕНЬ медленная с т.з. процесса исполнения операция.

"RE: Ещё одна мелочь в программировании на СИ..."
Отправлено Дмитрий , 04-Июл-02 16:18 
>1. Наличие проверяется
>if ( access( file, F_OK ) == 0 )

Строго говоря access() проверяет не только наличие файла как
такового, но еще и прав доступа к нему - проще воспользоваться
функцией stat()


"RE: Ещё одна мелочь в программировании на СИ..."
Отправлено Арлекин , 04-Июл-02 16:47 
Обычно делают кто как привык. Иной раз типа
if (!fopen(...)) ; else fclose(..)
достаточно. Вопрос необходимости, как всегда зависит от контекста.

"RE: Мелочь в программировании на СИ..."
Отправлено uldus , 26-Июн-02 16:04 
man 2 stat