OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 16 Октябрь, 2019 12:14

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Linux Console: интерфейс libc.errno
СообщениеДобавлено: Среда, 03 Октябрь, 2012 17:39 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
текст перенесён в новое сообщение для упорядочивания по времени: viewtopic.php?p=75277#p75277


Последний раз редактировалось Евгений Темиргалеев Четверг, 04 Октябрь, 2012 17:44, всего редактировалось 2 раз(а).
правка


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Linux Console: интерфейс libc.errno
СообщениеДобавлено: Четверг, 04 Октябрь, 2012 17:41 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
viewtopic.php?p=75215#p75215
Евгений Темиргалеев писал(а):
1) LinErrno. Данный модуль получился в результате формального перевода заголовка (подробности см. дельту). Математик я. Если имеются убедительные доказательства, что замена errno на функцию есть будущее, а переменная --- отживший век, то без сомнения, лучше от этого лишнего модуля избавиться.

viewtopic.php?p=75216#p75216
Alexander Shiryaev писал(а):
Евгений Темиргалеев писал(а):
1) LinErrno. Данный модуль получился в результате формального перевода заголовка (подробности см. дельту). Математик я. Если имеются убедительные доказательства, что замена errno на функцию есть будущее, а переменная --- отживший век, то без сомнения, лучше от этого лишнего модуля избавиться.

Код:
nm -g /usr/lib/libc.so.6 | grep __errno_location | grep -v ' F '

Linux Fedora Core 4 ("старый" Linux):
Код:
00015520 T __errno_location

Linux Fedora Core 17 ("новый" Linux):
Код:
466a6c00 T __errno_location

Кроме того, errno не всегда работает (даже ести он есть в libc.so.6), а __errno_location всегда (см. здесь и OpenBUGS).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Linux Console: интерфейс libc.errno
СообщениеДобавлено: Четверг, 04 Октябрь, 2012 17:42 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
Alexander Shiryaev писал(а):
... Кроме того, errno не всегда работает (даже ести он есть в libc.so.6), а __errno_location всегда (см. здесь и OpenBUGS).
Процитированное и отражено в LinErrno: приоритет отдаётся выдаче через __errno_location, если же его нет, то выдаётся переменная errno, адрес которой получается динамически. Для последнего есть тест, который показывает что он отличается от того, который выдаёт система при статическом связывании с библиотекой.

Примеры наличия в двух библиотеках --- эмпирика, которая не есть доказательство. Доказательством бы я счёл заявление какого-либо стратига развития libc, который бы озвучил факт перехода на новое решение (и поддержку старого для обратной совместимости). Или что-то вроде.
Может кто видел?

Короче, вопрос подхода:
1) Для меня, как математика опытное доказательство в голове не воспринимается. Может быть товарищи физики, кои тут однозначно в большинстве, на меня повлияют. :)
2) Нужна ли нам обратная совместимость с древними версиями libc?

Голосуйте, товарищи физики. я же, в своём меньшинстве, воздержусь. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Linux Console: интерфейс libc.errno
СообщениеДобавлено: Четверг, 04 Октябрь, 2012 17:59 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
Для меня вопрос решён: перевод errno.h корректно можно сделать только отдельным, не интерфейсным модулем. Который может учесть специфику конкретной реализации, вариативность которой заложена в документации:
http://www.gnu.org/software/libc/manual ... for-Errors
libc docu писал(а):
Portability Note: ISO C specifies errno as a “modifiable lvalue” rather than as a variable, permitting it to be implemented as a macro. For example, its expansion might involve a function call, like *__errno_location (). In fact, that is what it is on GNU/Linux and GNU/Hurd systems. The GNU C Library, on each system, does whatever is right for the particular system.

There are a few library functions, like sqrt and atan, that return a perfectly legitimate value in case of an error, but also set errno. For these functions, if you want to check to see whether an error occurred, the recommended method is to set errno to zero before calling the function, and then check its value afterward.

Раз запись и чтение аналогично сишному не сделать, значит надо делать по "обероновски":
Код:
MODULE LinErrno...
PROCEDURE Get* (OUT errno: INTEGER)
PROCEDURE Set* (errno: INTEGER)
Полноценный перевод errno.h должен будет содержать и коды ошибок, которые из LinLibc придётся убрать (двойственность не допустима).
libc docu писал(а):
All the error codes have symbolic names; they are macros defined in errno.h.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Linux Console: интерфейс libc.errno
СообщениеДобавлено: Четверг, 04 Октябрь, 2012 18:03 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4509
Откуда: Россия, Орёл
Пока буду потихоньку переделывать означенным способом. Если есть другие варианты, не тяните, предлагайте.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB