[linux] errno и POSIX threads
must not be explicitly declared; errno may be a macro.
смотрим bits/errno.h:
# if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
# define errno (*__errno_location
# endif
# endif /* !__ASSEMBLER__ */
#endif /* _ERRNO_H */
---
...Я работаю антинаучным аферистом...
Но при этом она перестает быть lvalue.
Нифига не перестает. Вчитайся в код. Там просто dereference указателя, возвращаемого функцией происходит. А эта операция возвращает вполне себе lvalue.
Действительно. Спасибо.
Есть такая штука в позиксе. Там есть еще много извратов.
По твоей ссылке я нашел ничего нового. То, что __errno пользуется pthread_key_create очевидно.
Оставить комментарий
sergey_m
Взял Debian и Dead Rat и вижу в errno(3):Кто нибудь может объяснить как такое может быть - что бы обычная глобальная переменная была разной в разных тредах?