isalpha

title: isalpha(3)

summary: функции классификации символов

text:
# isalpha(3)

## ИМЯ
isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit, isalnum_l, isalpha_l, isascii_l, isblank_l, iscntrl_l, isdigit_l, isgraph_l, islower_l, isprint_l, ispunct_l, isspace_l, isupper_l, isxdigit_l - функции классификации символов

## ОБЗОР

```
#include <ctype.h>
```

```
int isalnum(int c);
int isalpha(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
```

```
int isascii(int c);
int isblank(int c);
```

```
int isalnum_l(int c, locale_t locale);
int isalpha_l(int c, locale_t locale);
int isblank_l(int c, locale_t locale);
int iscntrl_l(int c, locale_t locale);
int isdigit_l(int c, locale_t locale);
int isgraph_l(int c, locale_t locale);
int islower_l(int c, locale_t locale);
int isprint_l(int c, locale_t locale);
int ispunct_l(int c, locale_t locale);
int isspace_l(int c, locale_t locale);
int isupper_l(int c, locale_t locale);
int isxdigit_l(int c, locale_t locale);
```

```
int isascii_l(int c, locale_t locale);
```

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

isascii():

_XOPEN_SOURCE

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _SVID_SOURCE

isblank():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

isalnum_l(), isalpha_l(), isblank_l(), iscntrl_l(), isdigit_l(), isgraph_l(), islower_l(), isprint_l(), ispunct_l(), isspace_l(), isupper_l(), isxdigit_l():

Начиная с glibc 2.10:

_XOPEN_SOURCE >= 700

До glibc 2.10:

_GNU_SOURCE

isascii_l():

Начиная с glibc 2.10:

_XOPEN_SOURCE >= 700 && (_SVID_SOURCE || _BSD_SOURCE)

До glibc 2.10:

_GNU_SOURCE

## ОПИСАНИЕ
Данные функции проверяют, попадает ли символ c (который должен иметь значение unsigned char или EOF) в определённый класс символов согласно указанной локали. Функции без суффикса «_l» выполняют проверку на основе текущей локали.

Функции с суффиксом «_l» выполняют проверку на основе указанного объекта локали locale. Поведение этих функций не определено, если значение locale равно специальному объекту локали LC_GLOBAL_LOCALE (смотрите duplocale(3)) или является некорректным описателем объекта локали.

Далее в списке описаны действия функций без суффикса «_l»; функции с суффиксом «_l» отличаются только использовании объекта локали locale вместо текущей локали.

isalnum()

Проверяет символ на принадлежность к число-буквенным символам; вызов эквивалентен (isalpha(c) || isdigit(c)).

isalpha()

Проверяет символ на принадлежность к алфавитным символам; в стандартной локали «C» это эквивалентно (isupper(c) || islower(c)). В некоторых локалях могут существовать дополнительные символы, для которых isalpha() верно — буквы могут не находиться ни в верхнем, ни в нижнем регистре.

isascii()

Проверяет, является ли c 7-битным значением unsigned char, которое попадает в таблицу символов ASCII.

isblank()

Проверяет, является ли символ пробельным (blank); то есть пробелом или символом табуляции.

iscntrl()

Проверяет, является ли символ управляющим.

isdigit()

Проверяет, является ли символ цифрой (от 0 до 9).

isgraph()

Проверяет, является ли символ печатным (но не пробельным).

islower()

Проверяет, является ли символ символом нижнего регистра.

isprint()

Проверяет, является ли символ печатным (включая пробельный).

ispunct()

Проверяет, является ли символ печатным; он не должен быть пробельным или цифро-буквенным символом.

isspace()

Проверяет, являются ли символы не отображаемыми. В локалях «C» и «POSIX» таковыми являются: пробел, символ перевода страницы («\f»), символ новой строки («\n»), символ перевода каретки («\r»), символ горизонтальной табуляции («\t») и символ вертикальной табуляции («\v»).

isupper()

Проверяет, является ли символ символом верхнего регистра.

isxdigit()

Проверяет, является ли символ шестнадцатеричной цифрой, т.е. одной из

0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функции возвращают ненулевые значения, если проверяемый символ c попадает в тестируемый класс символов, в противном случае возвращается 0.

## ВЕРСИИ
Функции isalnum_l(), isalpha_l(), isblank_l(), iscntrl_l(), isdigit_l(), isgraph_l(), islower_l(), isprint_l(), ispunct_l(), isspace_l(), isupper_l(), isxdigit_l() и isascii_l() доступны в glibc с версии 2.3.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

isalnum(), isalpha(), isascii(), isblank(), iscntrl(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), isxdigit()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
В C89 определены isalnum(), isalpha(), iscntrl(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper() и isxdigit(), но отсутствуют isascii() и isblank(). В POSIX.1-2001 также определены эти функции, а также isascii() (как расширение XSI) и isblank(). В C99 определены все перечисленные ранее функции кроме isascii().

В POSIX.1-2008 функция toascii() помечена как устаревшая с примечанием, что её нельзя использовать в локализованных приложениях.

В POSIX.1-2008 определены isalnum_l(), isalpha_l(), isblank_l(), iscntrl_l(), isdigit_l(), isgraph_l(), islower_l(), isprint_l(), ispunct_l(), isspace_l(), isupper_l() и isxdigit_l().

Функция isascii_l() является расширением GNU.

## ЗАМЕЧАНИЯ
Стандартами требуется, что аргумент c этих функций равнялся EOF или значению, которое представимо типом unsigned char. Если аргумент c имеет тип char, то он должен приводиться к unsigned char как в следующем примере:

```
char c;
...
res = toupper((unsigned char) c);
```

Это необходимо, так как char может быть эквивалентен signed char, и если у байта установлен старший знаковый бит, то он учитывается при приведении к int и байт превращается в значение, выходящее за границу unsigned char.

Отношение символов к какому-либо классу зависит от локали. Например, isupper() не распознает A-umlaut (Ä) как букву верхнего регистра в локали C по умолчанию.

## СМОТРИТЕ ТАКЖЕ
iswalnum(3), iswalpha(3), iswblank(3), iswcntrl(3), iswdigit(3), iswgraph(3), iswlower(3), iswprint(3), iswpunct(3), iswspace(3), iswupper(3), iswxdigit(3), newlocale(3), setlocale(3), toascii(3), tolower(3), toupper(3), uselocale(3), ascii(7), locale(7)


isatty

package: man-pages-ru

title: isatty(3)

text:
# isatty(3)

## ИМЯ
isatty - проверяет, указывает ли файловый дескриптор на терминал

## ОБЗОР

```
#include <unistd.h>
```

```
int isatty(int fd);
```

## ОПИСАНИЕ
Функция isatty() проверяет, указывает ли открытый файловый дескриптор fd на терминал.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
isatty() возвращает 1, если fd является открытым файловым дескриптором, указывающим на терминал; в противном случае возвращается 0, а в errno записывается номер соответствующей ошибки.

## ОШИБКИ
EBADF

Значение fd не является правильным файловым дескриптором.

ENOTTY

Значение fd указывает на файл, не являющийся терминалом. В некоторых старых ядрах с некоторыми типами файлов это приводило к ошибке EINVAL (что нарушает POSIX, согласно которому в этом случае должна возвращаться ошибка ENOTTY).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

isatty()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

## СМОТРИТЕ ТАКЖЕ
fstat(2), ttyname(3)

branch: sisyphus


isfdtype

title: isfdtype(3)

text:
# isfdtype(3)

## ИМЯ
isfdtype - проверяет тип файла файлового дескриптора

## ОБЗОР

```
#include <sys/stat.h>
#include <sys/socket.h>
```

```
int isfdtype(int fd, int fdtype);
```

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

isfdtype():

Начиная с glibc 2.20:

_DEFAULT_SOURCE

До glibc 2.20:

_BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Функция isfdtype() проверяет ссылается ли файловый дескриптор fd на файл с типом fdtype. В аргументе fdtype указывается одна из констант S_IF*, определённых в <sys/stat.h> и описанных в stat(2) (например, S_IFREG).

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция isfdtype() возвращает 1, если файловый дескриптор fd ссылается на файл с типом fdtype и 0, если нет. При ошибке возвращается -1 и в errno содержится код ошибки.

## ОШИБКИ
Функция isfdtype() может завершаться с теми же ошибками что и fstat(3).

## СООТВЕТСТВИЕ СТАНДАРТАМ
Функция isfdtype() отсутствует в каком-либо стандарте, но появлялась в черновике POSIX.1g. Она есть в OpenBSD и Tru64 UNIX (требуется заголовочный файл <sys/stat.h>, согласно черновику POSIX.1g), и, возможно, в других системах.

## ЗАМЕЧАНИЯ
В переносимых программах следует использовать fstat(3).

## СМОТРИТЕ ТАКЖЕ
fstat(3)


isgreater

title: isgreater(3)

text:
# isgreater(3)

## ИМЯ
isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered - сравнение чисел с плавающей запятой с учётом NaN

## ОБЗОР

```
#include <math.h>
```

```
int isgreater(x, y);
```

```
int isgreaterequal(x, y);
```

```
int isless(x, y);
```

```
int islessequal(x, y);
```

```
int islessgreater(x, y);
```

```
int isunordered(x, y);
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

Все функции, перечисленные здесь:

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

## ОПИСАНИЕ
Обычные операции сравнения (такие как < — «меньше чем») завершаются ошибкой, если одним из операндов является NaN. При этом возникает исключение. Для избежания подобной ситуации в C99 определены макросы, описанные ниже.

В данных макросах гарантируется однократное вычисление операндов. Аргументами могут быть любые типы с плавающей запятой (примечание: не передавайте в аргументах целочисленные значения, так как они не будут приведены к типу с плавающей запятой).

isgreater()

Вычисляет (x) > (y) даже, если значение x или y равно NaN.

isgreaterequal()

Вычисляет (x) >= (y) даже, если значение x или y равно NaN.

isless()

Вычисляет (x) < (y) даже, если значение x или y равно NaN.

islessequal()

Вычисляет (x) <= (y) даже, если значение x или y равно NaN.

islessgreater()

Вычисляет (x) < (y) || (x) > (y) даже, если значение x или y равно NaN. Этот макрос не эквивалентен x != y, так как это выражение правдиво (true), если значение x или y равно NaN.

isunordered()

Вычисляет, являются ли аргументы неупорядоченными (unordered), то есть не равен ли один из аргументов NaN.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Все макросы, кроме isunordered(), возвращают результат сравнения; они возвращают 0, если один из аргументов равен NaN.

Макрос isunordered() возвращает 1, если значение x или y равно NaN, и 0 в противном случае.

## ОШИБКИ
Ошибки не возникают.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

isgreater(), isgreaterequal(), isless(), islessequal(), islessgreater(), isunordered()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Не всё оборудование имеет эти возможности, и там, где их нет, они будут эмулироваться макросами. Это приведёт к небольшим потерям производительности. Не используйте эти макросы, если значения NaN для вас не существенны.

## СМОТРИТЕ ТАКЖЕ
fpclassify(3), isnan(3)


iswalnum

title: iswalnum(3)

summary: проверяет, является ли символ широким цифро\-буквенным символом

text:
# iswalnum(3)

## ИМЯ
iswalnum - проверяет, является ли символ широким цифро-буквенным символом

## ОБЗОР

```
#include <wctype.h>
```

```
int iswalnum(wint_t wc);
```

## ОПИСАНИЕ
Функция iswalnum() является эквивалентом функции isalnum(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «alnum».

Класс широких символов «alnum» является подклассом класса широких символов «graph» и, следовательно, подклассом класса широких символов «print».

Будучи подклассом класса широких символов «print», «alnum» не пересекается с классом широких символов «cntrl».

Будучи подклассом класса широких символов «graph», «alnum» не пересекается с классом широких символов «space» и его подклассом «blank».

Класс широких символов «alnum» не пересекается с классом широких символов «punct».

Класс широких символов «alnum» — объединение широких символьных классов «alpha» и «digit». Поэтому в него также входит класс широких символов «xdigit».

Класс широких символов «alnum» всегда содержит (как минимум) буквы от «A» до «Z», от «a» до «z» и цифры от «0» до «9».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswalnum() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «alnum». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswalnum()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswalnum() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
isalnum(3), iswctype(3)


iswalpha

title: iswalpha(3)

text:
# iswalpha(3)

## ИМЯ
iswalpha - проверяет, является ли символ широким алфавитным символом

## ОБЗОР

```
#include <wctype.h>
```

```
int iswalpha(wint_t wc);
```

## ОПИСАНИЕ
Функция iswalpha() является эквивалентом функции isalpha(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «alpha».

Класс широких символов «alpha» является подклассом класса широких символов «alnum» и, следовательно, подклассом класса широких символов «graph» и класса широких символов «print».

Будучи подклассом класса широких символов «print», «alpha» не пересекается с классом широких символов «cntrl».

Будучи подклассом класса широких символов «graph», «alpha» не пересекается с классом широких символов «space» и его подклассом «blank».

Будучи подклассом класса широких символов «alnum», «alpha» не пересекается с классом широких символов «punct».

Класс широких символов «alpha» не пересекается с классом широких символов «digit».

Класс широких символов «alpha» содержит классы широких символов «upper» и «lower».

Класс широких символов «alpha» всегда содержит (как минимум) буквы от «A» до «Z» и от «a» до «z».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswalpha() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «alpha». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswalpha()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswalpha() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
isalpha(3), iswctype(3)


iswblank

title: iswblank(3)

text:
# iswblank(3)

## ИМЯ
iswblank - проверяет, является ли символ пробельным (whitespace) широким символом

## ОБЗОР

```
#include <wctype.h>
```

```
int iswblank(wint_t wc);
```

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

iswblank():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

## ОПИСАНИЕ
Функция iswblank() является эквивалентом функции isblank(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «blank».

Класс широких символов «blank» является подклассом широких символов «space».

Будучи подклассом класса широких символов «space» класс широких символов «blank» не пересекается с классом широких символов «graph» и, следовательно, также не пересекается с его подклассами «alnum», «alpha», «upper», «lower», «digit», «xdigit», «punct».

Класс широких символов «blank» всегда содержит (как минимум) символ пробела и управляющий символ «\t».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswblank() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «blank». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswblank()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008.

## ЗАМЕЧАНИЯ
Поведение iswblank() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
isblank(3), iswctype(3)


iswcntrl

title: iswcntrl(3)

text:
# iswcntrl(3)

## ИМЯ
iswcntrl - проверяет, является ли символ широким управляющим символом

## ОБЗОР

```
#include <wctype.h>
```

```
int iswcntrl(wint_t wc);
```

## ОПИСАНИЕ
Функция iswcntrl() является эквивалентом функции iscntrl(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «cntrl».

Класс широких символов «cntrl» не пересекается с классом широких символов «print» и, следовательно, также не пересекается с его подклассами «graph», «alpha», «upper», «lower», «digit», «xdigit», «punct».

Для c с типом «unsigned char» функция iscntrl(c) выполняет iswcntrl(btowc(c)), но не наоборот.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswcntrl() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «cntrl». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswcntrl()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswcntrl() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
iscntrl(3), iswctype(3)


iswctype

title: iswctype(3)

summary: классифицирует широкие символы

text:
# iswctype(3)

## ИМЯ
iswctype - классифицирует широкие символы

## ОБЗОР

```
#include <wctype.h>
```

```
int iswctype(wint_t wc, wctype_t desc);
```

## ОПИСАНИЕ
Если wc — широкий символ, имеющий свойство символа, обозначенное desc (другими словами, принадлежащим классу символов, обозначенному desc), то функция iswctype() возвращает ненулевое значение. В противном случае возвращается ноль. Если wc равно WEOF, то возвращается ноль.

Значение desc должно быть описателем свойств символа, возвращаемым функцией wctype(3).

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswctype() возвращает ненулевое значение, если имя wc имеет обозначенное свойство. Иначе возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswctype()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswctype() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
iswalnum(3), iswalpha(3), iswblank(3), iswcntrl(3), iswdigit(3), iswgraph(3), iswlower(3), iswprint(3), iswpunct(3), iswspace(3), iswupper(3), iswxdigit(3), wctype(3)


iswdigit

title: iswdigit(3)

text:
# iswdigit(3)

## ИМЯ
iswdigit - проверяет, является ли символ широким символом десятичной цифры

## ОБЗОР

```
#include <wctype.h>
```

```
int iswdigit(wint_t wc);
```

## ОПИСАНИЕ
Функция iswdigit() является эквивалентом функции isdigit(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «digit».

Класс широких символов «digit» является подклассом класса широких символов «xdigit» и, следовательно, подклассом класса широких символов «alnum», класса широких символов «graph» и класса широких символов «print».

Будучи подклассом класса широких символов «print», «digit» не пересекается с классом широких символов «cntrl».

Будучи подклассом класса широких символов «graph», «digit» не пересекается с классом широких символов «space» и его подклассом «blank».

Будучи подклассом класса широких символов «alnum», «digit» не пересекается с классом широких символов «punct».

Класс широких символов «digit» не пересекается с классом широких символов «alpha» и, следовательно, также не пересекается с его подклассами «upper», «lower».

Класс широких символов «digit» всегда содержит только цифры от «0» до «9».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswdigit() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «digit». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswdigit()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswdigit() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
isdigit(3), iswctype(3)


iswgraph

title: iswgraph(3)

text:
# iswgraph(3)

## ИМЯ
iswgraph - проверяет, является ли широкий символ графическим символом

## ОБЗОР

```
#include <wctype.h>
```

```
int iswgraph(wint_t wc);
```

## ОПИСАНИЕ
Функция iswgraph() является эквивалентом функции isgraph(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «graph».

Класс широких символов «graph» является подклассом широких символов «print».

Будучи подклассом класса широких символов «print», «graph» не пересекается с классом широких символов «cntrl».

Класс широких символов «graph» не пересекается с классом широких символов «space» и, следовательно, также не пересекается с его подклассом «blank».

Класс широких символов «graph» содержит все широкие символы класса «print», за исключением символа пробела. Следовательно, класс содержит широкие символы классов «alnum» и «punct».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswgraph() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «graph». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswgraph()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswgraph() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
isgraph(3), iswctype(3)


iswlower

title: iswlower(3)

text:
# iswlower(3)

## ИМЯ
iswlower - проверяет, является ли символ широким символом в нижнем регистре

## ОБЗОР

```
#include <wctype.h>
```

```
int iswlower(wint_t wc);
```

## ОПИСАНИЕ
Функция iswlower() является эквивалентом функции islower(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «lower».

Класс широких символов «lower» является подклассом класса широких символов «alpha» и, следовательно, подклассом класса широких символов «alnum», класса широких символов «graph» и класса широких символов «print».

Будучи подклассом класса широких символов «print», «lower» не пересекается с классом широких символов «cntrl».

Будучи подклассом класса широких символов «graph», «lower» не пересекается с классом широких символов «space» и его подклассом «blank».

Будучи подклассом класса широких символов «alnum», «lower» не пересекается с классом широких символов «punct».

Будучи подклассом класса широких символов «alpha», «lower» не пересекается с классом широких символов «digit».

Класс широких символов «lower» содержит, по меньшей мере, те символы wc, которые равны towlower(wc) и отличаются от towupper(wc).

Класс широких символов «lower» всегда содержит (как минимум) буквы от «a» до «z».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswlower() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «lower». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswlower()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswlower() зависит от категории LC_CTYPE текущей локали.

Эта функция не очень подходит для работы с символами Юникода, так как в Юникоде есть три типа регистра: верхний, нижний и заглавный.

## СМОТРИТЕ ТАКЖЕ
islower(3), iswctype(3), towlower(3)


iswprint

title: iswprint(3)

text:
# iswprint(3)

## ИМЯ
iswprint - проверяет, является ли широкий символ печатным символом

## ОБЗОР

```
#include <wctype.h>
```

```
int iswprint(wint_t wc);
```

## ОПИСАНИЕ
Функция iswprint() является эквивалентом функции isprint(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «print».

Класс широких символов «print» не пересекается с классом широких символов «cntrl».

Класс широких символов «print» содержит класс широких символов «graph».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswprint() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «print». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswprint()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswprint() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
isprint(3), iswctype(3)


iswpunct

title: iswpunct(3)

text:
# iswpunct(3)

## ИМЯ
iswpunct - проверяет, является ли данный символ широким символом пунктуации или знака (symbolic)

## ОБЗОР

```
#include <wctype.h>
```

```
int iswpunct(wint_t wc);
```

## ОПИСАНИЕ
Функция iswpunct() является эквивалентом функции ispunct(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «punct».

Класс широких символов «punct» является подклассом класса широких символов «graph» и, следовательно, подклассом класса широких символов «print».

Класс широких символов «punct» не пересекается с классом широких символов «alnum» и, следовательно, также не пересекается с его подклассами «alpha», «upper», «lower», «digit», «xdigit».

Будучи подклассом класса широких символов «print», «punct» не пересекается с классом широких символов «cntrl».

Будучи подклассом класса широких символов «graph», «punct» не пересекается с классом широких символов «space» и его подклассом «blank».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswpunct() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «punct». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswpunct()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswpunct() зависит от категории LC_CTYPE текущей локали.

Название этой функции может показаться не корректным при работе с символами Юникода, так как широкие символы класса «punct» содержат как символы пунктуации, так и символы знаков (математические, денежные и т.п.).

## СМОТРИТЕ ТАКЖЕ
ispunct(3), iswctype(3)


iswspace

title: iswspace(3)

text:
# iswspace(3)

## ИМЯ
iswspace - проверяет, является ли символ пробельным (whitespace) широким символом

## ОБЗОР

```
#include <wctype.h>
```

```
int iswspace(wint_t wc);
```

## ОПИСАНИЕ
Функция iswspace() является эквивалентом функции isspace(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «space».

Класс широких символов «space» не пересекается с классом широких символов «graph» и, следовательно, также не пересекается с его подклассами «alnum», «alpha», «upper», «lower», «digit», «xdigit», «punct».

Класс широких символов «space» содержит класс широких символов «blank».

Класс широких символов «space» всегда содержит, по меньшей мере, пробел и управляющие символы «\f», «\n», «\r», «\t», «\v».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswspace() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «space». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswspace()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswspace() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
isspace(3), iswctype(3)


iswupper

title: iswupper(3)

text:
# iswupper(3)

## ИМЯ
iswupper - проверяет, является ли символ широким символом в верхнем регистре

## ОБЗОР

```
#include <wctype.h>
```

```
int iswupper(wint_t wc);
```

## ОПИСАНИЕ
Функция iswupper() является эквивалентом функции isupper(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «upper».

Класс широких символов «upper» является подклассом класса широких символов «alpha» и, следовательно, подклассом класса широких символов «alnum», класса широких символов «graph» и класса широких символов «print».

Будучи подклассом класса широких символов «print», «upper» не пересекается с классом широких символов «cntrl».

Будучи подклассом класса широких символов «graph», «upper» не пересекается с классом широких символов «space» и его подклассом «blank».

Будучи подклассом класса широких символов «alnum», «upper» не пересекается с классом широких символов «punct».

Будучи подклассом класса широких символов «alpha», «upper» не пересекается с классом широких символов «digit».

Класс широких символов «upper» содержит, по меньшей мере, те символы wc, которые равны towupper(wc) и отличаются от towlower(wc).

Класс широких символов «upper» всегда содержит (как минимум) буквы от «A» до «Z».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswupper() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «upper». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswupper()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswupper() зависит от категории LC_CTYPE текущей локали.

Эта функция не очень подходит для работы с символами Юникода, так как в Юникоде есть три типа регистра: верхний, нижний и заглавный.

## СМОТРИТЕ ТАКЖЕ
isupper(3), iswctype(3), towupper(3)


iswxdigit

title: iswxdigit(3)

text:
# iswxdigit(3)

## ИМЯ
iswxdigit - проверяет, является ли символ широким символом шестнадцатеричной цифры

## ОБЗОР

```
#include <wctype.h>
```

```
int iswxdigit(wint_t wc);
```

## ОПИСАНИЕ
Функция iswxdigit() является эквивалентом функции isxdigit(3), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «xdigit».

Класс широких символов «xdigit» является подклассом класса широких символов «alnum» и, следовательно, подклассом класса широких символов «graph» и класса широких символов «print».

Будучи подклассом класса широких символов «print», «xdigit» не пересекается с классом широких символов «cntrl».

Будучи подклассом класса широких символов «graph», «xdigit» не пересекается с классом широких символов «space» и его подклассом «blank».

Будучи подклассом класса широких символов «alnum», «xdigit» не пересекается с классом широких символов «punct».

Класс широких символов «xdigit» всегда содержит (как минимум) буквы от «A» до «F», от «a» до «f» и цифры от «0» до «9».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция iswxdigit() возвращает ненулевое значение, если wc является широким символом, принадлежащим классу широких символов «xdigit». В других случаях возвращается 0.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

iswxdigit()

Безвредность в нитях

MT-Safe locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.

## ЗАМЕЧАНИЯ
Поведение iswxdigit() зависит от категории LC_CTYPE текущей локали.

## СМОТРИТЕ ТАКЖЕ
iswctype(3), isxdigit(3)


title: j0(3)

summary: функции Бесселя первого рода

text:
# j0(3)

## ИМЯ
j0, j0f, j0l, j1, j1f, j1l, jn, jnf, jnl - функции Бесселя первого рода

## ОБЗОР

```
#include <math.h>
```

```
double j0(double x);
double j1(double x);
double jn(int n, double x);
```

```
float j0f(float x);
float j1f(float x);
float jnf(int n, float x);
```

```
long double j0l(long double x);
long double j1l(long double x);
long double jnl(int n, long double x);
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

j0(), j1(), jn():

_XOPEN_SOURCE

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

j0f(), j0l(), j1f(), j1l(), jnf(), jnl(): _XOPEN_SOURCE >= 600

|| (_ISOC99_SOURCE && _XOPEN_SOURCE)

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

## ОПИСАНИЕ
Функции j0() и j1() возвращают функцию Бесселя первого рода от x для порядков 0 и 1 соответственно. Функция jn() возвращает функцию Бесселя первого рода от x для порядка n.

Функции j0f(), j1f() и jnf() представляют собой версии, которые принимают и возвращают значения типа float. Функции j0l(), j1l() и jnl() представляют собой версии, которые принимают и возвращают значения типа long double.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха эти функции возвращают соответствующее значение функции Бесселя первого рода от x.

Если x имеет значение NaN, будет возвращено NaN.

Если значение x слишком велико по абсолютному значению или результат исчерпал степень, то генерируется ошибка диапазона и возвращается 0.

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка диапазона: результат исчерпал степень или значение x слишком велико по абсолютному значению

Значению errno присваивается ERANGE.

Эти функции не вызывают исключений для fetestexcept(3).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

j0(), j0f(), j0l()

Безвредность в нитях

MT-Safe

j1(), j1f(), j1l()

Безвредность в нитях

MT-Safe

jn(), jnf(), jnl()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
Функции, возвращающие double, соответствуют SVr4, 4.3BSD, POSIX.1-2001 и POSIX.1-2008. Остальные являются не стандартизованными функциями, которые также существуют в BSD.

## ДЕФЕКТЫ
Есть ошибки вплоть до 2e-16 в значениях, возвращаемых j0(), j1() и jn(), для значений x в диапазоне от -8 до 8.

## СМОТРИТЕ ТАКЖЕ
y0(3)


title: key_setsecret(3)

summary: взаимодействие с rpc\-службой сервера ключей

text:
# key_setsecret(3)

## ИМЯ
key_decryptsession, key_encryptsession, key_setsecret, key_gendes, key_secretkey_is_set - взаимодействие с rpc-службой сервера ключей

## ОБЗОР
\#include <rpc/rpc.h>

int key_decryptsession(char *remotename, des_block *deskey);

int key_encryptsession(char *remotename, des_block *deskey);

int key_gendes(des_block *deskey);

int key_setsecret(char *key);

int key_secretkey_is_set(void);

## ОПИСАНИЕ
Данные функции используются в механизме безопасной аутентификации RPC (AUTH_DES). Программы прикладного уровня не должны использовать эти функции.

Функция key_decryptsession() использует сетевое имя (удалённого) сервера и принимает ключ DES для расшифровки. Она использует открытый ключ сервера и закрытый ключ, привязанный к эффективному UID вызывающего процесса.

Функция key_encryptsession() противоположна key_decryptsession() по своему назначению. Она шифрует ключи DES открытым ключом сервера и закрытым ключом, привязанным к эффективному UID вызывающего процесса.

Функция key_gendes() используется для запроса у сервера ключей безопасного ключа обмена.

Функция key_setsecret() используется для привязки ключа к эффективному UID вызывающего процесса.

Функция key_secretkey_is_set() может быть использована для определения того, был ли привязан ключ к эффективному UID вызывающего процесса.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении эти функции возвращают 1 и 0 при ошибке.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

key_decryptsession(), key_encryptsession(), key_gendes(), key_setsecret(), key_secretkey_is_set()

Безвредность в нитях

MT-Safe

## ЗАМЕЧАНИЯ
Заметим, что здесь речь идёт о двух типах шифрования. Первый — асимметричный на основе использования открытого и закрытого ключа. Второй — симметричный, на основе 64-битного DES.

Данные функции были частью ныне заброшенного проекта Linux/Doors.

## СМОТРИТЕ ТАКЖЕ
crypt(3)


killpg

title: killpg(3)

summary: послать сигнал группе процессов

text:
# killpg(3)

## ИМЯ
killpg - послать сигнал группе процессов

## ОБЗОР
\#include <signal.h>

int killpg(int pgrp, int sig);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

killpg():

_XOPEN_SOURCE >= 500

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE

## ОПИСАНИЕ
killpg() отправляет сигнал sig группе процессов pgrp. Список сигналов можно найти в signal(7).

Если значение pgrp равно 0, то killpg() отправляет сигнал вызывающей группе процессов (в POSIX: если значение pgrp меньше или равно 1, то поведение не определено).

Права, требуемые для отправки сигнала другому процессу, смотрите в kill(2).

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

## ОШИБКИ
EINVAL

В sig задан неправильный номер сигнала.

EPERM

Процесс не имеет достаточно прав для отправки сигнала ни одному из группы процессов-получателей. Требуемые права смотрите в kill(2).

ESRCH

В группе процессов pgrp нет ни одного процесса.

ESRCH

Номер группы процессов равен 0, но процесс-отправитель не входит ни в какую группу процессов.

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD, (killpg() впервые появился в 4BSD).

## ЗАМЕЧАНИЯ
Есть некоторые различия между проверкой прав в системах BSD и System V. Смотрите в POSIX объяснение kill(). Различие не упомянуто в POSIX по отношению к возвращаемому значению EPERM: в BSD описано, что сигнал не послан и возвращается EPERM когда проверка прав не пройдена по крайней мере для одного процесса-получателя, в то время как в POSIX описано, что EPERM возвращается только когда проверка прав не пройдена для всех процессов-получателей.

### Отличия между библиотекой C и ядром
В Linux killpg() реализован в виде библиотечной функции, которая вызывает kill(-pgrp, sig).

## СМОТРИТЕ ТАКЖЕ
getpgrp(2), kill(2), signal(2), capabilities(7), credentials(7)


ldexp

title: ldexp(3)

text:
# ldexp(3)

## ИМЯ
ldexp, ldexpf, ldexpl - умножает число с плавающей запятой на 2 в степени целого числа

## ОБЗОР

```
#include <math.h>
```

```
double ldexp(double x, int exp);
float ldexpf(float x, int exp);
long double ldexpl(long double x, int exp);
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

ldexpf(), ldexpl():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Эти функции возвращают результат умножения числа с плавающей запятой x на 2 в степени exp.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении данные функции возвращают x * (2^exp).

Если exp равно 0, то будет возвращено x.

Если x равно NaN, будет возвращено NaN.

Если x стремится к плюс или минус бесконечности, будет возвращена плюс или минус бесконечность.

Если в результате исчерпана степень числа, возникает ошибка диапазона и возвращается ноль.

Если в результате превышена разрядность, то возникает ошибка диапазона и функции возвращают HUGE_VAL, HUGE_VALF или HUGE_VALL, соответственно, с тем же знаком что и x.

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка диапазона, переполнение

Значение errno устанавливается в ERANGE. Возникает исключение переполнения плавающей запятой (FE_OVERFLOW).

Ошибка диапазона, исчерпана степень

Значение errno устанавливается в ERANGE. Возникает исключение исчерпания степени числа с плавающей запятой (FE_UNDERFLOW).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

ldexp(), ldexpf(), ldexpl()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008.

Вариант, возвращающий значение типа double, также соответствует SVr4, 4.3BSD, C89.

## СМОТРИТЕ ТАКЖЕ
frexp(3), modf(3), scalbln(3)


lgamma

title: lgamma(3)

summary: логарифм

text:
# lgamma(3)

## ИМЯ
lgamma, lgammaf, lgammal, lgamma_r, lgammaf_r, lgammal_r, signgam - логарифм гамма-функции

## ОБЗОР

```
#include <math.h>
```

```
double lgamma(double x);
float lgammaf(float x);
long double lgammal(long double x);
```

```
double lgamma_r(double x, int *signp);
float lgammaf_r(float x, int *signp);
long double lgammal_r(long double x, int *signp);
```

```
extern int signgam;
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

lgamma():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* в версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

lgammaf(), lgammal(): _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

lgamma_r(), lgammaf_r(), lgammal_r(): /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

signgam: _XOPEN_SOURCE

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Определение гамма-функции смотрите в tgamma(3).

Функции lgamma(), lgammaf() и lgammal() возвращают натуральный логарифм абсолютного значения гамма-функции. Знак гамма-функции возвращается во внешнем целом signgam, объявленном в <math.h>. Оно равно 1, если гамма-функция положительна или равна нулю, и -1, если она отрицательна.

Так как использование постоянного расположения signgam не является безопасным при работе с нитями, то была созданы функции lgamma_r(), lgammaf_r() и lgammal_r(); они возвращают знак через аргумент signp.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении данные функции возвращают натуральный логарифм Gamma(x).

Если x равно NaN, будет возвращено NaN.

Если x равен 1 или 2, то возвращается +0.

Если x равен плюс бесконечности или минус бесконечности, возвращается плюс бесконечность.

Если x равно не положительному целому, генерируется ошибка особой точки, а функции возвращают +HUGE_VAL, +HUGE_VALF или +HUGE_VALL, соответственно.

Если происходит переполнение результата, возникает ошибка диапазона, а функция возвращает HUGE_VAL, HUGE_VALF или HUGE_VALL, соответственно, с математически правильным знаком.

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка особой точки: x равно не положительному целому

Значение errno устанавливается в ERANGE (но смотрите ДЕФЕКТЫ). Возникает исключение деления плавающей запятой на ноль (FE_DIVBYZERO).

Ошибка диапазона: результат превысил разрядность

Значение errno устанавливается в ERANGE. Возникает исключение переполнения плавающей запятой (FE_OVERFLOW).

## СООТВЕТСТВИЕ СТАНДАРТАМ
Функции lgamma() определены в C99, POSIX.1-2001 и POSIX.1-2008. Переменная signgam определена в POSIX.1-2001 и POSIX.1-2008, но отсутствует в C99. Функции lgamma_r() являются нестандартными, но существуют в нескольких других системах.

## ДЕФЕКТЫ
В glibc 2.9 и ранее при возникновении ошибки особой точки, значению errno присваивается EDOM вместо ERANGE согласно POSIX. Начиная с версии 2.10, в glibc это исправлено.

## СМОТРИТЕ ТАКЖЕ
tgamma(3)


title: lio_listio(3)

summary: запускает список запросов ввода\-вывода на выполнение

text:
# lio_listio(3)

## ИМЯ
lio_listio - запускает список запросов ввода-вывода на выполнение

## ОБЗОР

```
#include <aio.h>
```

```
int lio_listio(int mode, struct aiocb *const aiocb_list[],
               int nitems, struct sigevent *sevp);
```

```
Компонуется при указании параметра -lrt.
```

## ОПИСАНИЕ
Функция lio_listio() запускает на выполнение список операций ввода-вывода, описанных в массиве aiocb_list.

Значение операции mode может быть одним из следующих:

LIO_WAIT

Вызов не завершается до тех пор, пока не будут выполнены все операции. Аргумент sevp игнорируется.

LIO_NOWAIT

Операции ввода-вывода ставятся в очередь на обработку и вызов завершается. После выполнения всех операций ввода-вывода посылается асинхронное уведомление, задаваемое в аргументе sevp; подробности смотрите в sigevent(7). Если значение sevp равно NULL, то асинхронные уведомления не посылается.

Аргумент aiocb_list представляет собой массив указателей на структуры aiocb, в которых описаны операции ввода-вывода. Эти операции выполняются в произвольном порядке. В аргументе nitems указывается размер массива aiocb_list. Указатели null в aiocb_list игнорируются.

В каждом управляющем блоке в aiocb_list в поле aio_lio_opcode задаётся выполняемая операция ввода вывода; значения:

LIO_READ

Выполнить операцию чтения. Операция ставится в очередь как вызов aio_read(3) с указанным управляющим блоком.

LIO_WRITE

Выполнить операцию записи. Операция ставится в очередь как вызов aio_write(3) с указанным управляющим блоком.

LIO_NOP

Игнорировать управляющий блок.

Остальные поля в каждом управляющем блоке имеют то же назначение, что и для aio_read(3) и aio_write(3). Поля aio_sigevent в каждом управляющем блоке могут использоваться для указания уведомлений по отдельным операциям ввода-вывода (смотрите sigevent(7)).

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При значении mode равным LIO_NOWAIT функция lio_listio() возвращает 0, если все операции ввода-вывода были поставлены в очередь. В противном случае возвращается -1 и в errno содержится код ошибки.

При значении mode равным LIO_WAIT функция lio_listio() возвращает 0, если все операции ввода-вывода были выполнены без ошибок. В противном случае возвращается -1 и в errno содержится код ошибки.

В возвращаемом lio_listio() состоянии предоставляется информация только о самом вызове, а не об отдельных операция ввода-вывода. Одна или несколько операций ввода-вывода могут завершиться с ошибкой, но это не повлияет на выполнение остальных операций. Состояние отдельный операций ввода-вывода в aiocb_list можно определить с помощью aio_error(3). После завершения операции её результат можно получить с помощью aio_return(3). Отдельные операции ввода-вывода могут завершиться с ошибкой по причинам, описанным в aio_read(3) и aio_write(3).

## ОШИБКИ
Функция lio_listio() может завершиться с ошибкой по следующим причинам:

EAGAIN

Не хватает ресурсов.

EAGAIN

Количество операций ввода-вывода, указанное в nitems, превысило ограничение AIO_MAX.

EINTR

Значение mode равно LIO_WAIT и был получен сигнал до завершения всех операций ввода-вывода; смотрите signal(7) (это может быть даже один из асинхронных сигналов о завершении ввода-вывода).

EINVAL

Неправильное значение mode, или значение nitems превышает ограничение AIO_LISTIO_MAX.

EIO

Одна или более операций, указанных в aiocb_list, завершились с ошибкой. Приложение может проверить состояние каждой операции с помощью aio_return(3).

Если вызов lio_listio() завершился с ошибкой EAGAIN, EINTR или EIO, то некоторые операции из aiocb_list могли всё же начаться. Если вызов lio_listio() завершился по другой причине, то ни одна из операций ввода-вывода не началась.

## ВЕРСИИ
Функция lio_listio() доступна в glibc начиная с версии 2.1.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

lio_listio()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008.

## ЗАМЕЧАНИЯ
Рекомендуется обнулять управляющие блоки перед использованием. Управляющие блоки не должны изменяться пока выполняются операции ввода-вывода. Нельзя читать или писать в буферные области во время выполнения операций, иначе результат непредсказуем. Используемые области памяти должны оставаться корректными (valid).

Одновременное выполнение операций ввода-вывода через совместно используемую структуру aiocb приводит к непредсказуемым результатам.

## СМОТРИТЕ ТАКЖЕ
aio_cancel(3), aio_error(3), aio_fsync(3), aio_return(3), aio_suspend(3), aio_write(3), aio(7)


localeconv

title: localeconv(3)

text:
# localeconv(3)

## ИМЯ
localeconv - получает информацию о форматировании числовых данных

## ОБЗОР

```
#include <locale.h>
```

```
struct lconv *localeconv(void);
```

## ОПИСАНИЕ
Функция localeconv() возвращает указатель на структуру struct lconv для текущей локали. Эта структура определена в файле заголовков locale.h(7) и содержит все значения, связанные с категориями локали LC_NUMERIC и LC_MONETARY. Программы также могут использовать функции printf(3) и strfmon(3), поведение которых зависит от того, какая локаль сейчас используется.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция localeconv() возвращает указатель на структуру struct lconv. Под эту структуру может (в glibc так и есть) быть статически выделена память, и она может быть перезаписана следующими вызовами. Согласно POSIX, вызывающий не должен изменять содержимое структуры. Функция localeconv() всегда завершается без ошибок.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

localeconv()

Безвредность в нитях

MT-Unsafe race:localeconv locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
C89, C99.

## ДЕФЕКТЫ
Семейство функций printf(3) может и не учитывать настройки текущей локали.

## СМОТРИТЕ ТАКЖЕ
locale(1), localedef(1), isalpha(3), nl_langinfo(3), setlocale(3), strcoll(3), strftime(3), locale(7)


lockf

title: lockf(3)

text:
# lockf(3)

## ИМЯ
lockf - устанавливает, проверяет или удаляет блокировку POSIX на открытом файле

## ОБЗОР
\#include <unistd.h>

int lockf(int fd, int cmd, off_t len);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

lockf():

_XOPEN_SOURCE >= 500

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии gibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Устанавливает, проверяет наличие или удаляет блокировку POSIX с области открытого файла. Файл задаётся в параметре fd — файловым дескриптором, открытым на запись — действие — в cmd, а область указывается как позиции байт pos..pos+len-1, если len положительно, и pos-len..pos-1, если len отрицательно, где pos — текущая позиция в файле и, если len равно нулю, то область расширяется от текущей позиции файла до бесконечности, охватывая текущую и будущие позиции конца файла. Во всех случаях область может расширяться за текущий конец файла.

В Linux lockf() — всего лишь более удобный способ вызова fcntl(2) для блокировки. Во многих других системах реализация lockf() сделана подобным образом, но заметим, что в POSIX.1 нет явной связи между блокировками lockf() и fcntl(2). Переносимое приложение, вероятно, должно избегать использования этих двух вызовов одновременно.

Список существующих операций приведён ниже:

F_LOCK

Устанавливает исключительную блокировку указанной области файла. Если эта область (или её часть) уже блокирована, то вызов заблокирует выполнение до тех пор, пока не будет снята предыдущая блокировка. Если эта область перекрывается с ранее заблокированной областью, то они объединяются. Файловые блокировки снимаются сразу после того, как установивший их процесс закрывает файловый дескриптор. Дочерние процессы не наследуют подобные блокировки.

F_TLOCK

То же самое, что и F_LOCK, но вызов никогда не блокирует выполнение и возвращает ошибку, если файл уже заблокирован.

F_ULOCK

Снимает блокировку с заданной области файла. Может привести к тому, что блокируемая область будет поделена на две заблокированные области.

F_TEST

Проверяет наличие блокировки: возвращает 0, если указанная область не заблокирована или заблокирована вызвавшим процессом; возвращает -1, меняет значение errno на EAGAIN (в некоторых системах на EACCES), если блокировка установлена другим процессом.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

## ОШИБКИ
EACCES или EAGAIN

Файл блокирован и указана операция F_TLOCK или F_TEST, или операция запрещена, так как файл отображён в память другим процессом.

EBADF

Значение fd не является открытым файловым дескриптором, или значение cmd равно F_LOCK или F_TLOCK и файловый дескриптор fd не открыт на запись.

EDEADLK

Вызвана операция F_LOCK, которая приводит к вечной блокировке (deadlock).

EINTR

При ожидании получения блокировки вызов был прерван сигналом, пришедшим в обработчик; смотрите signal(7).

EINVAL

В cmd указана неправильная операция.

ENOLCK

Открыто слишком много областей для блокировки, таблица блокировок переполнена.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

lockf()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, SVr4.

## СМОТРИТЕ ТАКЖЕ
fcntl(2), flock(2)

Смотрите также файлы locks.txt и mandatory-locking.txt из каталога Documentation/filesystems с исходным кодом ядра Linux (в старых ядрах эти файлы были в каталоге Documentation, а mandatory-locking.txt назывался mandatory.txt).


log

title: log(3)

text:
# log(3)

## ИМЯ
log, logf, logl - функция вычисления натурального логарифма

## ОБЗОР

```
#include <math.h>
```

```
double log(double x);
float logf(float x);
long double logl(long double x);
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

logf(), logl():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Данные функции возвращают натуральный логарифм от x.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении данные функции возвращают натуральный логарифм от x.

Если x равно NaN, будет возвращено NaN.

Если x равно 1, результат будет +0.

Если x стремится к плюс бесконечности, то будет возвращена плюс бесконечность.

Если x равно нулю, возникнет ошибка особой точки, и функция вернет -HUGE_VAL, -HUGE_VALF или -HUGE_VALL, соответственно.

Если x отрицательно (включая минус бесконечность), то будет сгенерирована ошибка области, и будет возвращено NaN (Not a Number, не число).

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка области: x является отрицательным

errno устанавливается в EDOM. Вызывается исключение неправильной плавающей точки (FE_INVALID).

Ошибка особой точки: x равен нулю

errno устанавливается в ERANGE. Возникает исключение деления плавающей точки на ноль (FE_DIVBYZERO).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

log(), logf(), logl()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008.

Вариант, возвращающий значение типа double, также соответствует SVr4, 4.3BSD, C89.

## ДЕФЕКТЫ
В версии glibc 2.5 и ниже значение log() от NaN ошибочно производила исключение неправильной плавающей запятой (FE_INVALID).

## СМОТРИТЕ ТАКЖЕ
cbrt(3), clog(3), log10(3), log1p(3), log2(3), sqrt(3)


title: log10(3)

text:
# log10(3)

## ИМЯ
log10, log10f, log10l - функция вычисления десятичного логарифма

## ОБЗОР

```
#include <math.h>
```

```
double log10(double x);
float log10f(float x);
long double log10l(long double x);
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

log10f(), log10l():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Данные функции возвращают значение десятичного логарифма от x.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении данные функции возвращают значение десятичного логарифма от x.

Для особых случаев, когда x равно 0, 1, отрицательно, стремится к бесконечности или NaN, смотрите log(3).

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Обсуждение ошибок, которые могут возникнуть при вызове данных функций, смотрите log(3).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

log10(), log10f(), log10l()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008.

Вариант, возвращающий значение типа double, также соответствует SVr4, 4.3BSD, C89.

## СМОТРИТЕ ТАКЖЕ
cbrt(3), clog10(3), exp10(3), log(3), log2(3), sqrt(3)


title: log1p(3)

summary: логарифм от 1 плюс аргумент

text:
# log1p(3)

## ИМЯ
log1p, log1pf, log1pl - логарифм от 1 плюс аргумент

## ОБЗОР

```
#include <math.h>
```

```
double log1p(double x);
float log1pf(float x);
long double log1pl(long double x);
```

```

```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

log1p():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| _XOPEN_SOURCE >= 500

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

log1pf(), log1pl(): _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Данные функции возвращают значение эквивалентное

```
    log (1 + x)
```

Результат вычисляется методом, выдающим точные значения, даже если значение x близко к нулю.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении данные функции возвращают натуральный логарифм от (1 + x).

Если x равно NaN, будет возвращено NaN.

Если x стремится к плюс бесконечности, то будет возвращена плюс бесконечность.

Если x равно -1, возникнет ошибка особой точки, и функции вернут -HUGE_VAL, -HUGE_VALF или -HUGE_VALL, соответственно.

Если x меньше -1 (включая минус бесконечность), то будет сгенерирована ошибка области, и будет возвращено NaN (Not a Number, не число).

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка области: x меньше -1

Значение errno устанавливается в EDOM (но смотрите ДЕФЕКТЫ). Возникает исключение неправильной плавающей точки (FE_INVALID).

Ошибка особой точки: x равно -1

Значение errno устанавливается в ERANGE (но смотрите ДЕФЕКТЫ). Возникает исключение деления плавающей запятой на ноль (FE_DIVBYZERO).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

log1p(), log1pf(), log1pl()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008.

## ДЕФЕКТЫ
До версии 2.22 в реализации glibc при возникновении ошибки области errno не присваивалось значение EDOM.

До версии 2.22 в реализации glibc при возникновении ошибки диапазона errno не присваивалось значение ERANGE.

## СМОТРИТЕ ТАКЖЕ
exp(3), expm1(3), log(3)


title: log2(3)

text:
# log2(3)

## ИМЯ
log2, log2f, log2l - функция вычисления логарифма по основанию 2

## ОБЗОР

```
#include <math.h>
```

```
double log2(double x);
float log2f(float x);
long double log2l(long double x);
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

log2(), log2f(), log2l():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

## ОПИСАНИЕ
Данные функции возвращают значение логарифма по основанию 2 от числа x.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении данные функции возвращают значение логарифма по основанию 2 от числа x.

Для особых случаев, когда x равно 0, 1, отрицательно, стремится к бесконечности или NaN, смотрите log(3).

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Обсуждение ошибок, которые могут возникнуть при вызове данных функций, смотрите log(3).

## ВЕРСИИ
Эти функции впервые появились в glibc 2.1.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

log2(), log2f(), log2l()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008.

Вариант, возвращающий значение типа double, также соответствует SVr4, 4.3BSD.

## СМОТРИТЕ ТАКЖЕ
cbrt(3), clog2(3), log(3), log10(3), sqrt(3)


logb

title: logb(3)

text:
# logb(3)

## ИМЯ
logb, logbf, logbl - получение экспоненты значения числа с плавающей запятой

## ОБЗОР
\#include <math.h>

double logb(double x);

float logbf(float x);

long double logbl(long double x);

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

logb():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| _XOPEN_SOURCE >= 500

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

logbf(), logbl(): _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE

|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Эти функции извлекают экспоненту из внутреннего представления числа с плавающей запятой x и возвращают его в виде значения с плавающей запятой. Целочисленная константа FLT_RADIX, определённая в <float.h>, задаёт основание системного представления плавающей запятой. Если FLT_RADIX равно 2, то logb(x) эквивалентен floor(log2(x)) (но, вероятно, быстрее).

Если x субнормально, то logb() возвращает экспоненту x так, как если бы она была нормализована.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха эти функции возвращают экспоненту от x.

Если x равно NaN, будет возвращено NaN.

Если x равно нулю, возникнет ошибка особой точки, и функция вернет -HUGE_VAL, -HUGE_VALF или -HUGE_VALL, соответственно.

Если x стремится к минус или плюс бесконечности, то будет возвращена плюс бесконечность.

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка особой точки: x равно 0

Возникает исключение деления плавающей запятой на ноль (FE_DIVBYZERO).

Эти функции не изменяют errno.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

logb(), logbf(), logbl()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008.

## СМОТРИТЕ ТАКЖЕ
ilogb(3), log(3)


login

title: login(3)

summary: добавление записей utmp и wtmp

text:
# login(3)

## ИМЯ
login, logout - добавление записей utmp и wtmp

## ОБЗОР
\#include <utmp.h>

void login(const struct utmp *ut);

int logout(const char *ut_line);

Компонуется при указании параметра -lutil.

## ОПИСАНИЕ
В файл utmp записываются все, кто в данный момент пользуется системой. В файле wtmp записываются все входы и выходы пользователей. См utmp(5).

Функция login() принимает указанные struct utmp, ut и записывает их в файлы utmp и wtmp.

Функция logout() очищает запись в файле utmp.

### Особенности GNU
Если быть точнее, функция login() получает структуру ut в качестве аргумента, заполняет поле ut->ut_type (если такое поле есть) значением USER_PROCESS и поле ut->ut_pid (если такое поле есть) идентификатором вызывающего процесса (PID). После этого она пытается заполнить поле ut->ut_line. Функция берёт первый stdin, stdout, stderr, являющийся терминалом, и сохраняет соответствующий путь (за исключением /dev/ спереди) в это поле, после чего записывает структуру в файл utmp. В случае, если имя терминала не будет обнаружено, данное поле будет заполнено «???», а структура не будет записана в файл utmp. После этого структура будет записана в файл wtmp.

Функция logout() ищет в файле utmp запись, соответствующую аргументу ut_line. Если запись находится, она обновляется заполнением нулям полей ut_name и ut_host, обновляется временная отметка в поле ut_tv, а поле ut_type (если такое поле есть) устанавливается в DEAD_PROCESS.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция logout() возвращает 1, если запись была успешно записана в базу данных, и 0, если возникла ошибка.

## ФАЙЛЫ
/var/run/utmp

база учётных записей пользователей, настраивается через _PATH_UTMP в <paths.h>

/var/log/wtmp

файл журнала учёта пользователей, настраивается через _PATH_WTMP в <paths.h>

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

login(), logout()

Безвредность в нитях

MT-Unsafe race:utent sig:ALRM timer

В приведённой выше таблице utent в race:utent означает, что если любая из функций setutent(3), getutent(3) или endutent(3) используется одновременно в нескольких нитях программы, то может возникнуть состязательность по данным. Эти функции вызываются из login() и logout(), поэтому мы используем race:utent для напоминания.

## СООТВЕТСТВИЕ СТАНДАРТАМ
Не является частью POSIX.1. Присутствует в BSD.

## ЗАМЕЧАНИЯ
Заметим, что поле ut_user структуры struct utmp в BSD называется ut_name. Поэтому поле ut_name определено как псевдоним ut_user в <utmp.h>.

## СМОТРИТЕ ТАКЖЕ
getutent(3), utmp(5)


lrint

title: lrint(3)

summary: округление до ближайшего

text:
# lrint(3)

## ИМЯ
lrint, lrintf, lrintl, llrint, llrintf, llrintl - округление до ближайшего целого

## ОБЗОР

```
#include <math.h>
```

```
long int lrint(double x);
long int lrintf(float x);
long int lrintl(long double x);
```

```
long long int llrint(double x);
long long int llrintf(float x);
long long int llrintl(long double x);
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

Все функции, показанные выше:

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

## ОПИСАНИЕ
Данные функции округляют переданный аргумент до ближайшего целого значения в соответствии с текущим направлением округления (см. fesetround(3)).

Заметим, что в отличии от семейства функций rint(3), тип возвращаемого значения этих функций отличается от типа их аргументов.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Данные функции возвращают округлённое целое число.

Если x является NaN или равно бесконечности, либо округленное значение слишком велико для типа long (long long в случае функций ll*), возникает ошибка области, а возвращаемое значение останется неуказанным.

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка области: x является NaN или равно бесконечности, либо округленное значение слишком велико

Возникает исключение неправильной плавающей запятой (FE_INVALID).

Эти функции не изменяют errno.

## ВЕРСИИ
Эти функции впервые появились в glibc 2.1.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

lrint(), lrintf(), lrintl(), llrint(), llrintf(), llrintl()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008.

## СМОТРИТЕ ТАКЖЕ
ceil(3), floor(3), lround(3), nearbyint(3), rint(3), round(3)


lround

title: lround(3)

summary: округление до

text:
# lround(3)

## ИМЯ
lround, lroundf, lroundl, llround, llroundf, llroundl - округление до ближайшего целого

## ОБЗОР

```
#include <math.h>
```

```
long int lround(double x);
long int lroundf(float x);
long int lroundl(long double x);
```

```
long long int llround(double x);
long long int llroundf(float x);
long long int llroundl(long double x);
```

Компонуется при указании параметра -lm.

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

Все функции, показанные выше:

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

## ОПИСАНИЕ
Эти функции округляют аргумент до ближайшего целого значения, используя направление округления от нуля, независимо от текущего направления округления (смотрите fenv(3)).u

Заметим, что в отличии от функций round(3) и ceil(3), тип возвращаемого значения этих функций отличается от типа их аргументов.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Данные функции возвращают округлённое целое число.

Если x является NaN или равно бесконечности, либо округленное значение слишком велико для типа long (long long в случае функций ll*), возникает ошибка области, а возвращаемое значение останется неуказанным.

## ОШИБКИ
Смотрите math_error(7), чтобы определить, какие ошибки могут возникать при вызове этих функций.

Могут возникать следующие ошибки:

Ошибка области: x является NaN или равно бесконечности, либо округленное значение слишком велико

Возникает исключение неправильной плавающей запятой (FE_INVALID).

Эти функции не изменяют errno.

## ВЕРСИИ
Эти функции впервые появились в glibc 2.1.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

lround(), lroundf(), lroundl(), llround(), llroundf(), llroundl()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008.

## СМОТРИТЕ ТАКЖЕ
ceil(3), floor(3), lrint(3), nearbyint(3), rint(3), round(3)


lsearch

title: lsearch(3)

summary: линейный поиск в массиве

text:
# lsearch(3)

## ИМЯ
lfind, lsearch - линейный поиск в массиве

## ОБЗОР

```
#include <search.h>
```

```
void *lfind(const void *key, const void *base, size_t *nmemb,
         size_t size, int(*compar)(const void *, const void *));
```

```
void *lsearch(const void *key, void *base, size_t *nmemb,
         size_t size, int(*compar)(const void *, const void *));
```

## ОПИСАНИЕ
Функции lfind() и lsearch() выполняют линейный поиск key в массиве base, который имеет *nmemb элементов, каждый по size байт. Функция сравнения, определяемая compar, должна иметь два параметра, которые указывают на объект key и на член массива, в указанном порядке, и возвращать ноль, если объект key совпадает с членом массива, и ненулевое значение в противном случае.

Если lsearch() не находит совпадающих элементов, то объект key вставляется в конец таблицы, а значение *nmemb увеличивается. Отметим, что теперь совпадающий элемент существует, и что есть ещё место.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция lfind() возвращает указатель на совпадающий член массива, или NULL, если не было совпадений. Функция lsearch() возвращает указатель на совпадающий член массива, или на добавленный новый член, если не было найдено совпадений.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

lfind(), lsearch()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. Присутствует в libc начиная с libc-4.6.27.

## ДЕФЕКТЫ
Неудачно выбрано имя.

## СМОТРИТЕ ТАКЖЕ
bsearch(3), hsearch(3), tsearch(3)


title: lseek64(3)

text:
# lseek64(3)

## ИМЯ
lseek64 - изменяет смещение в файле, используемое при чтении/записи, в соответствии с 64-битным значением

## ОБЗОР
\#define _LARGEFILE64_SOURCE /* См. feature_test_macros(7) */

\#include <sys/types.h>

\#include <unistd.h>

off64_t lseek64(int fd, off64_t offset, int whence);

## ОПИСАНИЕ
Семейство вызовов lseek(2) изменяет смещение в открытом файле, с которым связан файловый дескриптор fd, на offset байт относительно начала, текущего положения или конца файла, в зависимости от значений whence — SEEK_SET, SEEK_CUR, или SEEK_END, соответственно.

Подробности, возвращаемое значение и ошибки смотрите в lseek(2).

Доступно четыре интерфейса: lseek(2), lseek64(), llseek(2) и _llseek(2).

### lseek()
Прототип:

```
off_t lseek(int fd, off_t offset, int whence);
```

В lseek(2) используется тип off_t, который в 32-битной системе является 32-битным знаковым типом, если только при компиляция не определён макрос

```
#define _FILE_OFFSET_BITS 64
```

в этом случае он будет 64-битным знаковым типом.

### lseek64()
Прототип:

```
off64_t lseek64(int fd, off64_t offset, int whence);
```

В библиотечной функции lseek64() используется 64-битный тип, даже если off_t является 32-битным типом. Её прототип (и тип off64_t) доступен только когда при компиляции определён макрос

```
#define _LARGEFILE64_SOURCE
```

Функция lseek64() доступна начиная с glibc 2.1 и определена как псевдоним llseek().

### llseek()
Прототип:

```
loff_t llseek(int fd, loff_t offset, int whence);
```

Тип loff_t является 64-битным знаковым типом. Библиотечная функция llseek() доступна в glibc и работает без каких-либо дополнительных определений. Однако в glibc для неё нет прототипа. Пользователи должны добавить указанный выше прототип или его эквивалент в свой исходный код. Когда пользователи стали жаловаться на потерю данных, вызванную неправильной компиляцией e2fsck(8), в glibc 2.1.3 добавили предупреждение времени компоновки.

"the `llseek´ function may be dangerous; use `lseek64´ instead."

Это делает данную бесполезной в случае, если кто-то захочет избавиться от предупреждения.

### _llseek()
На 32-битных архитектурах данный системный вызов используется для реализации перечисленных выше функций. Прототип:

```
int _llseek(int fd, off_t offset_hi, off_t offset_lo,
            loff_t *result, int whence);
```

Подробную информацию смотрите в llseek(2).

На 64-битных архитектурах системный вызов _llseek() не требуется. Вместо него в них используется системный вызов lseek(2), поддерживающий 64-битные файловые смещения.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

lseek64()

Безвредность в нитях

MT-Safe

## СМОТРИТЕ ТАКЖЕ
llseek(2), lseek(2)


makecontext

title: makecontext(3)

summary: управляет пользовательским контекстом

text:
# makecontext(3)

## ИМЯ
makecontext, swapcontext - управляет пользовательским контекстом

## ОБЗОР
\#include <ucontext.h>

void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);

int swapcontext(ucontext_t *oucp, const ucontext_t *ucp);

## ОПИСАНИЕ
В окружении, подобном SysV, имеется тип данных mcontext_t, определённый в файле <ucontext.h>, и четыре функции — getcontext(3), setcontext(3), makecontext() и swapcontext(), которые позволяют контексту пользовательского уровня переключаться между несколькими нитями внутри одного процесса.

Описание типа и первых двух функций смотрите в getcontext(3).

Функция makecontext() изменяет контекст, на который указывает ucp (полученный из вызова getcontext(3)). Перед вызовом makecontext(), вызывающий должен выделить новый стек для этого контекста и присвоить его адрес ucp->uc_stack, и определить последующий контекст и присвоить его адрес ucp->uc_link.

Позднее, когда этот контекст активируется (с помощью setcontext(3) или swapcontext()), вызывается функция func и ей передаётся набор целочисленных аргументов (int), указанных после argc; вызывающий должен указать количество этих аргументов в argc. После возврата из функции активируется последующий контекст. Если указатель последующего контекста равен NULL, то нить завершается.

Функция swapcontext() сохраняет текущий контекст в структуру, на которую указывает oucp, и после этого активирует контекст, на который указывает ucp.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении swapcontext() не возвращает выполнение (но мы можем вернуться позднее при активации oucp и это будет выглядеть как если бы swapcontext() вернула 0). При ошибке swapcontext() возвращает -1 и изменяет errno соответствующим образом.

## ОШИБКИ
ENOMEM

Осталось недостаточно стекового пространства.

## ВЕРСИИ
Функции makecontext() и swapcontext() появились в glibc начиная с версии 2.1.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

makecontext()

Безвредность в нитях

MT-Safe race:ucp

swapcontext()

Безвредность в нитях

MT-Safe race:oucp race:ucp

## СООТВЕТСТВИЕ СТАНДАРТАМ
SUSv2, POSIX.1-2001. В POSIX.1-2008 удалены определения makecontext() и swapcontext() со ссылкой на проблемы с переносимостью и рекомендацией переписать приложение с использование нитей POSIX.

## ЗАМЕЧАНИЯ
Назначение ucp->uc_stack подобно описанному в sigaltstack(2), а именно: данная структура содержит начало и размер области памяти, которая будет использоваться как стек, независимо от направления роста стека. То есть, в пользовательской программе нет необходимости учитывать это направление.

В архитектурах, где тип int и указатель имеют одинаковый размер (например, x86-32, оба типа имеют размер 32 бита), вы можете передавать указатели в аргументах makecontext() после argc. Однако, это не гарантирует переносимость, не определено в стандарте и не работает на архитектурах, где указатели больше int. Тем не менее, начиная с версии 2.8, в glibc внесены изменения в makecontext(), которые позволяют это и на некоторых 64-битных архитектурах (например, x86-64).

## ПРИМЕР
В программе, показанной далее, демонстрируется использование getcontext(3), makecontext() и swapcontext(). Вот результат запуска этой программы:

```
$ ./a.out
main: swapcontext(&uctx_main, &uctx_func2)
func2: запущена
func2: swapcontext(&uctx_func2, &uctx_func1)
func1: запущена
func1: swapcontext(&uctx_func1, &uctx_func2)
func2: возврат
func1: возврат
main: выход
```

### Исходный код программы

```
#include <ucontext.h>
#include <stdio.h>
#include <stdlib.h>
static ucontext_t uctx_main, uctx_func1, uctx_func2;
#define handle_error(msg) \

    do { perror(msg); exit(EXIT_FAILURE); } while (0)
static void
func1(void)
{

    printf("func1: запущена\n");

    printf("func1: swapcontext(&uctx_func1, &uctx_func2)\n");

    if (swapcontext(&uctx_func1, &uctx_func2) == -1)

        handle_error("swapcontext");

    printf("func1: возврат\n");
}
static void
func2(void)
{

    printf("func2: запущена\n");

    printf("func2: swapcontext(&uctx_func2, &uctx_func1)\n");

    if (swapcontext(&uctx_func2, &uctx_func1) == -1)

        handle_error("swapcontext");

    printf("func2: возврат\n");
}
int
main(int argc, char *argv[])
{

    char func1_stack[16384];

    char func2_stack[16384];

    if (getcontext(&uctx_func1) == -1)

        handle_error("getcontext");

    uctx_func1.uc_stack.ss_sp = func1_stack;

    uctx_func1.uc_stack.ss_size = sizeof(func1_stack);

    uctx_func1.uc_link = &uctx_main;

    makecontext(&uctx_func1, func1, 0);

    if (getcontext(&uctx_func2) == -1)

        handle_error("getcontext");

    uctx_func2.uc_stack.ss_sp = func2_stack;

    uctx_func2.uc_stack.ss_size = sizeof(func2_stack);

    /* последующий контекст — f1(), если argc > 1 */

    uctx_func2.uc_link = (argc > 1) ? NULL : &uctx_func1;

    makecontext(&uctx_func2, func2, 0);

    printf("main: swapcontext(&uctx_main, &uctx_func2)\n");

    if (swapcontext(&uctx_main, &uctx_func2) == -1)

        handle_error("swapcontext");

    printf("main: выход\n");

    exit(EXIT_SUCCESS);
}
```

## СМОТРИТЕ ТАКЖЕ
sigaction(2), sigaltstack(2), sigprocmask(2), getcontext(3), sigsetjmp(3)


makedev

title: makedev(3)

summary: управление номером устройства

text:
# makedev(3)

## ИМЯ
makedev, major, minor - управление номером устройства

## ОБЗОР

```
#include <sys/sysmacros.h>
```

```
dev_t makedev(unsigned int maj, unsigned int min);
```

```
unsigned int major(dev_t dev);
unsigned int minor(dev_t dev);
```

## ОПИСАНИЕ
Идентификатор (ID) устройства состоит из двух частей: старшего номера, определяющего класс устройства, и младшего номера, указывающего на определённый экземпляр устройства в этом классе. Для представления ID устройства используется тип dev_t.

Функция makedev() объединяет указанные старший и младший ID устройства, возвращая ID устройства. Этот ID может быть передан mknod(2).

Функции major() и minor() выполняют обратную задачу: по указанному ID устройства они возвращают, соответственно, старший и младший номера. Данные макросы могут пригодиться, например, для разложения ID устройства из структуры, возвращенной stat(2).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

makedev(), major(), minor()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
Функции makedev(), major() и minor() не описаны в POSIX.1, однако присутствуют во многих системах.

## ЗАМЕЧАНИЯ
Данные интерфейсы определены как макросы. Начиная с glibc 2.3.3, они являются псевдонимами для трёх GNU-функций: gnu_dev_makedev(), gnu_dev_major() и gnu_dev_minor(). Эти имена экспортированы, однако использование традиционных имён более переносимо.

В BSD определения этих макросов доступны в <sys/types.h>. В зависимости от версии, в glibc они также доступны из этого заголовочного файла, если определён подходящий макрос тестирования свойств. Однако такое применение устарело в glibc 2.25, и начиная с glibc 2.28, эти определения были удалены из <sys/types.h>.

## СМОТРИТЕ ТАКЖЕ
mknod(2), stat(2)


mallinfo

title: mallinfo(3)

text:
# mallinfo(3)

## ИМЯ
mallinfo — возвращает информацию о выделении памяти

## ОБЗОР
\#include <malloc.h>

struct mallinfo mallinfo(void);

## ОПИСАНИЕ
Функция mallinfo() возвращает копию структуры, содержащую информацию о выделении памяти, выполненной функцией malloc(3) и связанными с ней функциями.

Заметим, что не все приложения видимы в mallinfo(); смотрите ДЕФЕКТЫ и вместо неё используйте malloc_info(3).

Возвращаемая структура определена следующим образом:

```
struct mallinfo {

    int arena;     /* не размеченная область памяти выделенная под кучу (в байтах) */

    int ordblks;   /* Количество свободных блоков */

    int smblks;    /* Количество свободных блоков fastbin */

    int hblks;     /* Количество размеченных областей */

    int hblkhd;    /* Пространство, выделенное в размеченных областях (в байтах) */

    int usmblks;   /* Максимум общей выделенной области (в байтах) */

    int fsmblks;   /* Пространство в освобожденных fastbin блоках (в байтах) */

    int uordblks;  /* Общее выделенное пространство (в байтах) */

    int fordblks;  /* Общее свободное пространство (в байтах) */

    int keepcost;  /* Верхнее пространство, которое можно освободить (в байтах) */
};
```

Поля структуры mallinfo содержат следующую информацию:

arena

Общее количество памяти, выделенной способами отличными от mmap(2) (т. е., память, выделенная из кучи). Это значение включает используемые и свободные блоки из списка.

ordblks

Количество обычных (т. е., не fastbin) свободных блоков.

smblks

Количество свободных блоков fastbin (смотрите mallopt(3)).

hblks

Количество блоков, выделенных с помощью mmap(2) на настоящий момент (смотрите описание M_MMAP_THRESHOLD в mallopt(3)).

hblkhd

Количество байт в блоках, выделенных с помощью mmap(2) на настоящий момент.

usmblks

«Верхняя отметка» выделенного пространства, то есть максимальное количество места, которое когда-либо выделялось. Это поле изменяется только в окружениях без нитей.

fsmblks

Общее количество байт в свободных блоках fastbin.

uordblks

Общее количество байт, в используемой выделенной памяти.

fordblks

Общее количество байт в свободных блоках.

keepcost

Общее количество освобождаемого свободного пространства сверху кучи. Это значение является максимальным количеством байт, которое будет освобождено malloc_trim(3) в идеальном случае (т. е., без учёта ограничений по выравниванию и т. п.).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

mallinfo()

Безвредность в нитях

MT-Unsafe init const:mallopt

Функция mallinfo() получила бы доступ к некоторым глобальным внутренним переменным. Если изменять их не атомарно, то можно нарушить целостность результатов. Идентификатор mallopt в const:mallopt означает, что mallopt() изменяла бы глобальные внутренние переменные атомарно, что делает mallinfo() достаточно безопасной, но другие изменения могут выполняться не атомарно.

## СООТВЕТСТВИЕ СТАНДАРТАМ
Эта функция не определена в стандартах POSIX и С. Подобная функция существует на многих производных от System V и была определена в SVID.

## ДЕФЕКТЫ
Информация возвращается только для главной области выделяемой памяти. Выделение в других областях не учитываются. Альтернативой, возвращаемой информацию о других частях, являются malloc_stats(3) и malloc_info(3).

Поля структуры mallinfo имеют тип int. Однако, из-за того, что некоторые внутренние значения поддержки (bookkeeping) могут иметь тип long, возвращаемые значения могут быть близкими к нулю и поэтому не точны.

## ПРИМЕР
Программа, представленная ниже, вызывает mallinfo() для получения статистики по выделенной памяти перед и после выделения и освобождения нескольких блоков памяти. Статистика выдаётся в стандартный вывод.

Первые два параметра командной строки определяют количество и размер блоков, которые будут выделены с помощью malloc(3).

В оставшихся трёх аргументах задаётся какие из выделенных блоков должны быть освобождены с помощью free(3). Эти аргументы необязательны и определяют (по порядку): размер шага, используемый в цикле освобождения блоков (по умолчанию 1, что приводит к освобождению всех блоков диапазона); порядковая позиция первого освобождаемого блока (по умолчанию 0, то есть первый выделенный блок); номер, на единицу больший порядковой позиции последнего освобождаемого блока (по умолчанию, на единицу больше, чем максимальное количество блоков). Если эти аргументы не указаны, то по умолчанию освобождаются все выделенные блоки.

Пример запуска программы, где память выделяется 1000 раз по 100 байт, а затем освобождается каждый второй выделенный блок:

```
$ ./a.out 1000 100 2
============== перед выделением блоков ==============
всего неотображённых байт (часть):       0
кол-во свободных порций (ordblks):            1
кол-во свободных блоков fastbin (smblks):     0
кол-во отображённых областей (hblks):           0
байтов в отображённых областях (hblkhd):      0
максимальное количество выделенного пространства (usmblks):  0
свободных байт в fastbins (fsmblks): 0
полное выделенное пространство (uordblks):      0
полное свободное пространство (fordblks):           0
освобождаемых блоков сверху (keepcost):   0
============== после выделения блоков ==============
всего неотображённых байт (часть):       1
кол-во свободных порций (ordblks):            0
кол-во свободных блоков fastbin (smblks):     0
кол-во отображённых областей (hblks):           0
байтов в отображённых областях (hblkhd):      0
максимальное количество выделенного пространства (usmblks):  0
свободных байт в fastbins (fsmblks): 0
полное выделенное пространство (uordblks):      104000
полное свободное пространство (fordblks):           31168
освобождаемых блоков сверху (keepcost):   31168
============== после освобождения блоков ==============
всего неотображённых байт (часть):       135168
кол-во свободных порций (ordblks):            501
кол-во свободных блоков fastbin (smblks):     0
кол-во отображённых областей (hblks):           0
байтов в отображённых областях (hblkhd):      0
максимальное количество выделенного пространства (usmblks):  0
свободных байт в fastbins (fsmblks): 0
полное выделенное пространство (uordblks):      52000
полное свободное пространство (fordblks):           83168
освобождаемых блоков сверху (keepcost):   31168
```

### Исходный код программы

```
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
static void
display_mallinfo(void)
{

    struct mallinfo mi;

    mi = mallinfo();

    printf("всего неотображённых байт (часть):       %d\n", mi.arena);

    printf("кол-во свободных порций (ordblks):            %d\n", mi.ordblks);

    printf("кол-во свободных блоков fastbin (smblks):     %d\n", mi.smblks);

    printf("кол-во отображённых областей (hblks):           %d\n", mi.hblks);

    printf("байтов в отображённых областях (hblkhd):      %d\n", mi.hblkhd);

    printf("максимальное количество выделенного пространства (usmblks):  %d\n", mi.usmblks);

    printf("свободных байт в fastbins (fsmblks): %d\n", mi.fsmblks);

    printf("полное выделенное пространство (uordblks):      %d\n", mi.uordblks);

    printf("полное свободное пространство (fordblks):           %d\n", mi.fordblks);

    printf("освобождаемых блоков сверху (keepcost):   %d\n", mi.keepcost);
}
int
main(int argc, char *argv[])
{
#define MAX_ALLOCS 2000000

    char *alloc[MAX_ALLOCS];

    int numBlocks, j, freeBegin, freeEnd, freeStep;

    size_t blockSize;

    if (argc < 3 || strcmp(argv[1], "--help") == 0) {

        fprintf(stderr, "%s кол-во блоков размер блока [шаг освобождения"

                "[начало освобождения [конец освобождения]]]\n", argv[0]);

        exit(EXIT_FAILURE);

    }

    numBlocks = atoi(argv[1]);

    blockSize = atoi(argv[2]);

    freeStep = (argc > 3) ? atoi(argv[3]) : 1;

    freeBegin = (argc > 4) ? atoi(argv[4]) : 0;

    freeEnd = (argc > 5) ? atoi(argv[5]) : numBlocks;

    printf("============== перед выделением блоков ==============\n");

    display_mallinfo();

    for (j = 0; j < numBlocks; j++) {

        if (numBlocks >= MAX_ALLOCS) {

            fprintf(stderr, "слишком много выделений\n");

            exit(EXIT_FAILURE);

        }

        alloc[j] = malloc(blockSize);

        if (alloc[j] == NULL) {

            perror("malloc");

            exit(EXIT_FAILURE);

        }

    }

    printf("\n============== после выделения блоков ==============\n");

    display_mallinfo();

    for (j = freeBegin; j < freeEnd; j += freeStep)

        free(alloc[j]);

    printf("\n============== после освобождения блоков ==============\n");

    display_mallinfo();

    exit(EXIT_SUCCESS);
}
```

## СМОТРИТЕ ТАКЖЕ
mmap(2), malloc(3), malloc_info(3), malloc_stats(3), malloc_trim(3), mallopt(3)


malloc

title: malloc(3)

summary: распределяет и освобождает динамическую

text:
# malloc(3)

## ИМЯ
malloc, free, calloc, realloc - распределяет и освобождает динамическую память

## ОБЗОР

```
#include <stdlib.h>
```

```
void *malloc(size_t size);
void free(void *ptr);
void *calloc(size_t nmemb, size_t size);
void *realloc(void *ptr, size_t size);
void *reallocarray(void *ptr, size_t nmemb, size_t size);
```

Требования макроса тестирования свойств для glibc (смотрите feature_test_macros(7)):

reallocarray(): _GNU_SOURCE

Начиная с glibc 2.29:

_DEFAULT_SOURCE

В glibc 2.28 и старее:

_GNU_SOURCE

## ОПИСАНИЕ
Функция malloc() распределяет size байтов и возвращает указатель на распределённую память. Память при этом не инициализируется. Если значение size равно 0, то malloc() возвращает или NULL, или уникальный указатель, который можно без опасений передавать free().

Функция free() освобождает место в памяти, указанное в ptr, которое должно быть получено ранее вызовом функции malloc(), calloc() или realloc(). Иначе (или если вызов free(ptr) уже выполнялся) дальнейшее поведение не определено. Если значение ptr равно NULL, то не выполняется никаких действий.

Функция сalloc() распределяет память для массива размером nmemb элементов по size байтов каждый и возвращает указатель на распределённую память. Данные в выделенной памяти при этом обнуляются. Если значение nmemb или size равно 0, то calloc() возвращает NULL или уникальный указатель, который можно без опасений передавать free(). Если перемножение nmemb и size приводит к целочисленному переполнению, то calloc() возвращает ошибку. Это отличает её от malloc(), которая не обнаруживает целочисленное переполнение и возвращает блок памяти неправильного размера:

```
malloc(nmemb * size);
```

Функция realloc() меняет размер блока памяти, на который указывает ptr, на размер, равный size байт. Содержимое памяти не будет изменено от начала области в пределах наименьшего из старого и нового размеров. Если новый размер больше старого, то добавленная память не будет инициализирована. Если значение ptr равно NULL, то вызов эквивалентен malloc(size) для всех значений size; если значение size равно нулю и ptr не равно NULL, то вызов эквивалентен free(ptr). Если только значение ptr не равно NULL, то должно быть возвращено ранее полученное значение от malloc(), calloc() или realloc(). Если область была перемещена, то выполняется free(ptr).

Функция reallocarray() изменяет размер блока памяти, на который указывает ptr, таким образом, чтобы он смог вместить массив из nmemb элементов, каждый из которых занимает size байт. Она эквивалентна вызову

realloc(ptr, nmemb * size);

Однако в отличие от вызова realloc(), функция reallocarray() безопасно завершается ошибкой в случае возникновения переполнения умножения. Если это происходит, то reallocarray() возвращает NULL, присваивает errno значение ENOMEM и оставляет первоначальный блок памяти в неизменном виде.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функции malloc() и calloc() возвращают указатель на распределённую память, выровненную должным образом для любого встроенного типа. При ошибке возвращается NULL. Значение NULL также может быть получено при успешной работе вызова malloc(), если значение size равно нулю, или calloc() — если значение nmemb или size равно нулю.

Функция free() ничего не возвращает.

Функция realloc() возвращает указатель на новую распределённую память, выровненную должным образом для любого встроенного типа. Возвращаемый указатель может отличаться от ptr, или равняться NULL, если запрос завершился с ошибкой. Если значение size было равно нулю, то возвращается либо NULL, либо указатель, который может быть передан free(). Если realloc() завершилась с ошибкой, то начальный блок памяти остаётся нетронутым: он не освобождается или перемещается.

При успешном выполнении функция reallocarray() возвращает указатель на новую выделенную память. При ошибке возвращается NULL, а первоначальный блок памяти не изменяется.

## ОШИБКИ
Функции calloc(), malloc(), realloc() и reallocarray() могут завершаться со следующей ошибкой:

ENOMEM

Не хватает памяти. Вероятно приложение достигнут лимит RLIMIT_AS или RLIMIT_DATA, описанный в getrlimit(2).

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

malloc(), free(), calloc(), realloc()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
malloc(), free(), calloc(), realloc(): POSIX.1-2001, POSIX.1-2008, C89, C99.

Функция reallocarray() является нестандартным расширением, впервые появилась в OpenBSD 5.6 и FreeBSD 11.0.

## ЗАМЕЧАНИЯ
По умолчанию, Linux придерживается оптимистичной стратегии распределения памяти. Это означает, что когда malloc() возвращает значение не NULL, то нет никаких гарантий, что память в действительности доступна. Если обнаружится, что системе не хватает памяти, то один или несколько процессов будут завершены OOM. Дополнительную информацию можно получить из описания /proc/sys/vm/overcommit_memory и /proc/sys/vm/oom_adj в proc(5) и файле из исходного кода ядра Linux Documentation/vm/overcommit-accounting.rst.

Обычно, malloc() выделяет память из кучи и подгоняет размер кучи соответствующим образом с помощью sbrk(2). Если выделяемый блок памяти больше чем MMAP_THRESHOLD байт, то реализация malloc() в glibc выделяет память с помощью mmap(2) в виде частного анонимного отображения. По умолчанию, значение MMAP_THRESHOLD равно 128 КБ, но его можно изменить с помощью mallopt(3). До Linux 4.7 на выделения, выполняемые с помощью mmap(2), не влияет ограничитель ресурса RLIMIT_DATA; начиная с Linux 4.7 это ограничение также применяется к выделениям, созданным с помощью mmap(2).

Внутри данных функций для защиты от повреждений выделяемых структур данных управления памятью, используются мьютексы. В многонитевых приложениях, в которых нити одновременно выделяют и освобождают память, может возникнуть конфликт за обладание этими мьютексами. Чтобы расширить обработку выделения памяти в многонитевых приложениях библиотека glibc создаёт дополнительные области выделения памяти (memory allocation arenas), если обнаруживается конфликт. Каждая область представляет собой большой кусок памяти, который внутренне выделен системой (с помощью brk(2) или mmap(2)) и управляется своими собственными мьютексами.

Стандарт SUSv2 требует, чтобы функции malloc(), calloc() и realloc() при ошибках присваивали значение ENOMEM переменной errno. Glibc допускает, что это уже реализовано (и версии glibc этих функций делают это); если вы используете свою реализацию функции malloc, которая не изменяет errno, то некоторые функции библиотеки могут закончить работу с ошибкой без указания причины в errno.

Аварийные ситуации в malloc(), calloc(), realloc() или free() почти всегда связаны с повреждением кучи, например, с переполнением больших распределённых участков памяти или освобождением одного и того же указателя дважды.

Реализация malloc() настраивается с помощью переменных окружения; подробности смотрите в mallopt(3).

## СМОТРИТЕ ТАКЖЕ
valgrind(1), brk(2), mmap(2), alloca(3), malloc_get_state(3), malloc_info(3), malloc_trim(3), malloc_usable_size(3), mallopt(3), mcheck(3), mtrace(3), posix_memalign(3)

Информацию о реализации в библиотеке GNU C смотрите в https://sourceware.org/glibc/wiki/MallocInternals.


title: malloc_get_state(3)

summary: сохраняют и восстанавливают состояние в

text:
# malloc_get_state(3)

## ИМЯ
malloc_get_state, malloc_set_state - сохраняют и восстанавливают состояние в реализации malloc

## ОБЗОР

```
#include <malloc.h>
```

```
void* malloc_get_state(void);
```

```
int malloc_set_state(void *state);
```

## ОПИСАНИЕ
Примечание: эта функция была удалена в glibc версии 2.25.

Функция malloc_get_state() записывает текущее состояние всех внутренних служебных переменных malloc(3) (но не фактическое содержимое кучи или состояние указателей функций malloc_hook(3)). Состояние сохраняется в системно-зависимой структуре данных с закрытым форматом, динамически выделенной через malloc(3), и указатель на эту структуру данных возвращается как результат функции (вызывающий является ответственным за вызов free(3) для этой памяти).

Функция malloc_set_state() восстанавливает значения состояния внутренних служебных переменных malloc(3) из сохранённой структуры закрытого формата, на которую указывает state.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении malloc_get_state() возвращает указатель на только что выделенную структуру с закрытым форматом. При ошибке (например, если не получилось выделить память под структуру) malloc_get_state() возвращает NULL.

При успешном выполнении malloc_set_state() возвращается 0. Если реализация обнаруживает, что state не указывает на корректную структуру с данными, то malloc_set_state() возвращает -1. Если реализация обнаруживает, что версия структуры данных, на которую ссылается state, новее чем известно реализации, то malloc_set_state() возвращает -2.

## АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).

Интерфейс

Атрибут

Значение

malloc_get_state(), malloc_set_state()

Безвредность в нитях

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
Эти функции являются расширениями GNU.

## ЗАМЕЧАНИЯ
Эти функции полезны при использовании реализации malloc(3) в виде общей библиотеки, а содержимое кучи сохраняется/восстанавливается каким-то другим способом. Это используется в GNU Emacs для реализации своей функции «выгрузки».

Эти функции никогда не сохраняют и не восстанавливают указатели на перехватывающие функции, но есть два исключения: если вызваны проверки malloc (смотрите mallopt(3)), то, если возможно, malloc_get_state() сбрасывает проверки malloc перехватывающих функций; если проверки malloc не используются в сохранённом состоянии, но вызывающий их запросил, то перехватывающие функции сбрасываются в 0.

## СМОТРИТЕ ТАКЖЕ
malloc(3), mallopt(3)