Что произойдет, если вы выйдете из программы без выполнения fclose ()? - PullRequest
9 голосов
/ 10 сентября 2011

Вопрос:

Что произойдет, если я выйду из программы без закрытия файлов?

Есть ли что-то плохое (например, некоторые массивы дескрипторов файлов на уровне ОС не освобождаются ...?)

А к ответу одинаково в обоих случаях

  • запрограммированный выход
  • неожиданный сбой

Примеры кодов:

С запрограммированным выходом я имею в виду что-то вроде этого:

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
}

приписка

Если ответ зависит от языка программирования, я хотел бы знать о C и C ++.

Если ответ зависит от ОС, меня интересует поведение Linux и Windows.

Ответы [ 3 ]

8 голосов
/ 10 сентября 2011

Это зависит от того, как вы выходите.При контролируемых обстоятельствах (через exit() или возврат из main()) данные в (выходных) буферах будут сброшены, а файлы будут закрыты упорядоченным образом.Другие ресурсы, которые имел процесс, также будут освобождены.

Если ваша программа выходит из-под контроля или если она вызывает одну из альтернативных функций _exit() или _Exit(), тосистема все еще будет очищать (закрывать) открытые файловые дескрипторы и освобождать другие ресурсы, но буферы не будут очищаться и т. д.

3 голосов
/ 10 сентября 2011

ОС убирает за вас.Это все равно, что ходить вокруг к друзьям - это вежливо закрывать дверь в ванную и не заставлять их делать это за тебя.

1 голос
/ 10 сентября 2011

Все дескрипторы, которые принадлежат вашему процессу, будут очищены.Однако любые «именованные» объекты ядра, такие как именованные каналы и другие, останутся.

...