Здравствуйте, 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 помогает найти такие ошибки.