Re[10]: Сейчас на меня набросятся
От: pavel_turbin  
Дата: 18.12.05 12:24
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>pavel_turbin wrote:



Pzz>Можно еще сознательно игнорировать результат close(). Например, если я

Pzz>закрываю временный файл, который уже отслужил свое, зачем мне знать код
Pzz>возврата? Сделать-то с ним ничего осмысленного я все равно не смогу...

тут в другом дело. Задача избежать 2-го закрытия того же handle-a. handle может принять значение какого-нибудь уже существующего handle-a, т.к после close его значение может быть вновь использовано.

например, в коде 2 раза закрыли fh.




int myfunction()
{
     int fh = open(...);
     if( fh < 0 )
         return -1;
 
     if( read( fh, ...) == -1)
     {
         close(fh); 
         // забыли return -1;
     }
 
     close(fh); // закрываем тот-же handle 2-ой раз!
     return 0;
}


в multy-thread приложении (и не только!) 2-ое закрытие иногда может быть успешным, т.к. старое значение fh может случайно совпасть с только что открытым новым файлом в параллельном потоке. assert от результата close помогает найти такие ошибки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.