Кожен системний виклик, який не вдається оновити errno
значення.
Таким чином, ви можете отримати більше інформації про те, що відбувається, коли ifstream
відкриття не працює, використовуючи щось на зразок:
cerr << "Error: " << strerror(errno);
Однак, оскільки кожен системний виклик оновлює глобальне errno
значення, у вас може виникнути проблема в багатопотоковій програмі, якщо інший системний виклик викликає помилку між виконанням f.open
та використанням errno
.
У системі зі стандартом POSIX:
errno є локальним для потоку; встановлення його в одному потоці не впливає на його значення в будь-якому іншому потоці.
Редагувати (дякую Арне Мерцу та іншим людям у коментарях):
e.what()
спочатку здавалося, що це C ++ - ідіоматичніше правильний спосіб реалізації цього, однак рядок, повернутий цією функцією, залежить від реалізації, і (принаймні в libstdc ++ G ++) цей рядок не має корисної інформації про причину помилки ...