Как стать автором
Обновить

Заметки о Unix: сильные и слабые стороны errno в традиционных Unix-окружениях

Время на прочтение 4 мин
Количество просмотров 4.9K
Всего голосов 40: ↑35 и ↓5 +30
Комментарии 14

Комментарии 14

Жуткий перевод.
Что-то гуглетранслейт не в ударе сегодня.

Это из какого года статья?
Я точно помню, что впервые, как я посмотрел на errno, это уже был макрос на функцию. Так что никаких проблем с многопоточностью.
Если я правильно понял man7.org/linux/man-pages/man7/signal-safety.7.html, там явно указано, что надо сохранить errno и восстановить, если хотите вызывать функции из разрешённого списка, устанавливающие errno.
Какая разница какого года статья, если в ней обсуждается “единый UNIX”, каким он был до седьмой версии (то есть до 1980го года).
А как-то сомневаюсь, что вам повезло с ним в те годы познакомиться. Разве что вы ДЕМОС застали (я про него только в книжках читал).
Я точно помню, что впервые, как я посмотрел на errno, это уже был макрос на функцию. Так что никаких проблем с многопоточностью.
Ну да, только куча проблем с эффективностью.

Вообще на 32-битных системах это плохой интерфейс. Применямый в Linux (всё что от -4095 до -1 — ошибка, вне этого диапазона — возвращаемое значение) гораздо удобнее.

Ваш man в отношение к обсуждаемой статье — это что-то из далёкого “светлого” будущего.

С многопоточностью проблемы errno вполне решаемы (главное чтоб кто-то захотел их решать). Просто тред-зависимую переменную сделать и всё.

НЛО прилетело и опубликовало эту надпись здесь

видимо не везде, раз статьи вот такие появляются

НЛО прилетело и опубликовало эту надпись здесь

я тоже не слышал, может автор нам пример приведёт?

А вас не смутило что в статье обсуждается Unix 30-летней давности, нет?

Современный C способен на такие фокусы, как возврат двухэлементной структуры в паре регистров

Никогда не видел такого :/ Это время уже прошло или ещё не наступило?

НЛО прилетело и опубликовало эту надпись здесь
Аааа… мои глаза! Это что за компилятор у вас такую дичь нагенерил? Нормальный же код большая четвёрка порождает.

Но тут у вас один регистр. Чтобы два было нужно, скажем, указатель и код ошибки вернуть

Но главная проблема с обсуждаемыми временами — это даже не то, что структуру нельзя вернуть эффективно, а то, что её нельзя вернуть вообще. K&R C этого не поддерживает. Хотя C89 поддерживает и многие компиляторы так умели уже в 80е… но не в обсуждающиеся в статье 70е!
НЛО прилетело и опубликовало эту надпись здесь
-O3

В GCC с ним осторожнее надо. Вот именно потому что оно побуждает всё агрессивно векторизовать, засовывать в SIMD'ы, что далеко не всегда приводит к выигрышу в скорости и почти всегда — к проигрышу в размере кода.

Но это как раз потому что в один регистр упаковывать в обычных регистрах не так удобно, когда нужны именно два регистра таких чудес нету.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий