Системный вызов close возвращает код ошибки:
https://man7.org/linux/man-pages/man2/close.2.html
Опустим тривиальные случаи типа EINTR. Например, возвращается EIO - «An I/O error occurred», что не сильно более информативно, чем «иди на …». Фактически, ничего дельного, кроме разве что отправки лога (или попапа об ошибке, если это гуишное ПО), сделать нельзя. Можно попытаться повторить операцию close. Но откуда мы знаем, что во второй раз она завершится удачно? В общем случае она теоретически может завершиться удачно на (N+1)’й попытке, где N может быть произвольно большим числом.
UPD: а ещё не специфицировано, освободится ли дескриптор файла при EIO, так что в такой ситуации ещё может быть исчерпание лимита открытых файлов.
А вы что делаете в таких случаях, когда вообще непонятно, как программе обработать ошибочное состояние?