Что произойдет, если вы выйдете из программы, не выполнив функцию fclose ()?
Вопрос:
Что произойдет, если я выйду из программы без закрытия файлов?
Происходят ли какие-то плохие вещи (например, какой-то массив дескрипторов файлов уровня ОС не освобождается..?)
И к ответу тому же в обоих случаях
- запрограммированный выход
- Неожиданная авария
Примеры кода:
С запрограммированным выходом я имею в виду что-то вроде этого:
int main(){
fopen("foo.txt","r");
exit(1);
}
С неожиданным треском я имею в виду что-то вроде этого:
int main(){
int * ptr=NULL;
fopen("foo.txt","r");
ptr[0]=0; // causes segmentation fault to occur
}
P.S.
Если ответ зависит от языка программирования, то я хотел бы знать о C и C++.
Если ответ зависит от операционной системы, то меня интересует поведение Linux и Windows.
3 ответа:
Это зависит от того, как вы выйдете. При контролируемых обстоятельствах (через
exit()
или возврат изmain()
), данные в буферах (вывода) будут сброшены, а файлы закрыты упорядоченным образом. Будут высвобождены и другие ресурсы, которыми располагал этот процесс.Если ваша программа выходит из-под контроля, или если она вызывает один из альтернативных вариантов
_exit()
или_Exit()
функции, то система по-прежнему будет очищать (закрывать) открытые файловые дескрипторы и освобождать другие ресурсы, но буферы не будут промыты и т. д.