![](http://webcf.waybackmachine.org/web/20210509160454im_/https://habrastorage.org/getpro/habr/avatars/e36/812/d3d/e36812d3de38eb3d479d7a13228717ef.png)
Заметки о Unix: сильные и слабые стороны errno в традиционных Unix-окружениях
- Перевод
errno
был, в целом, хорошим интерфейсом в Unix-системах до появления в них многопоточности. Кого-то подобное высказывание может удивить, поэтому сегодня предлагаю поговорить о сильных и слабых сторонах errno
в традиционных Unix-окружениях, таких, как V7 Unix.![](https://webcf.waybackmachine.org/web/20210509160454im_/https://habrastorage.org/webt/ti/nk/ot/tinkot5pyzv9m1kfzg-3h48bh7m.jpeg)
Сильной стороной
errno
является тот факт, что этот интерфейс представляет собой простейший механизм, способный возвращать несколько значений из системных вызовов C, в которых нет непосредственной поддержки возврата нескольких значений (особенно — в ранних вариантах C). Использование глобальной переменной для «возврата» второго значения — это практически идеал того, что можно сделать в обычном C, если только не планировать передачу из C-библиотеки указателя на каждый системный вызов и функцию, которые собираются возвращать значение errno
(при таком подходе придётся, например, интенсивно пользоваться stdio
). Постоянная передача подобного указателя приводит не только к ухудшению внешнего вида кода. Такой подход увеличивает объём кода, и, из-за использования дополнительного параметра, приводит к повышению нагрузки на стек (или на регистры).