Re: gethostname vs pread/pwrite in Linux

From
Valentin Nechayev ()
To
Igor Sysoev ()
Date
2003-06-05T14:11:30Z
Area
RU.UNIX.PROG
From: Valentin Nechayev <netch@segfault.kiev.ua>

>>> Igor Sysoev wrote: 

IS> Спасибо за советы. Решил воспользоваться -D_GNU_SOURCE.
IS> Но есть такой вопрос - какой тайный смысл этих _BSD_SOURCE, _GNU_SOURCE и
IS> _XOPEN_SOURCE ?

Начинаются-то они с _POSIX_SOURCE. Идея такая: в системе может быть что
угодно, но если она соответствует Posix'у, то программе при определении
_POSIX_SOURCE должно быть доступно только то, что в Posix, и не более.
Цель - обеспечение переносимости - заставляем компилироваться с _POSIX_SOURCE
и тогда можем быть уверены, что программа переедет без проблем на другую
систему, тоже соответствующую Posix'у. Потом вместо _POSIX_SOURCE
назначили _POSIX_C_SOURCE, _POSIX2_C_SOURCE и так далее, _XOPEN_SOURCE...

Но это ограничительные определения. А есть, наоборот, разрешительные.
_GNU_SOURCE для glibc - команда включать всё, _BSD_SOURCE - включать
комплект BSD'шных определений, и так далее.

За деталями лучше всего смотреть: info libc 'Feature test macros'.
Соотношения между тем, что включается, а что исключается, достаточно
туманны.

IS> Скажем, в случае _FILE_OFFSET_BITS, _REENERANT или даже _LARGEFILE_SOURCE
IS> мне понятен физических смысл этих определений, а вот _GNU_SOURCE - нет.
IS> Что плохого в том, что будет доступно определение pread/pwrite ?

См. выше.

P.S. Ну ты дискуссию во freebsd-arch помнишь недавнюю насчёт проблемы
включения видимости символов в libc без их маскировки? (Тема:
`Hiding' libc symbols)
Это я к тому, что не всё решается только видимостью на этапе компиляции.


-netch-
--- ifmail v.2.15dev5
 * Origin: Dark side of coredump (2:5020/400)