btowc

title: btowc(3)

summary: преобразует один байт в широкий символ

text:
# btowc(3)

## ИМЯ
btowc - преобразует один байт в широкий символ

## ОБЗОР

```
#include <wchar.h>
```

```
wint_t btowc(int c);
```

## ОПИСАНИЕ
Функция btowc() преобразует аргумент c, который считает многобайтовой последовательностью с длиной 1 и находящийся в начальном состоянии сдвига, в широкий символ, и возвращает его. Если значение c равно EOF или не содержит правильной многобайтовой последовательности длиной 1, то btowc() возвращает WEOF.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция btowc() возвращает широкий символ, преобразованный из c. Если значение c равно EOF или содержит некорректную многобайтовую последовательность длиной 1, то возвращается WEOF.

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

Интерфейс

Атрибут

Значение

btowc()

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

MT-Safe

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

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

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

## СМОТРИТЕ ТАКЖЕ
mbrtowc(3), mbtowc(3), wctob(3)


btree

package: man-pages-ru

title: btree(3)

text:
# btree(3)

## ИМЯ
btree - метод доступа к базе данных двоичного дерева

## ОБЗОР

```
#include <sys/types.h>
#include <db.h>
```

## ОПИСАНИЕ
Примечание: В этой странице описаны интерфейсы, предоставляемые glibc до версии 2.1. Начиная с версии 2.2, glibc больше не поддерживает эти интерфейсы. Вероятно, вы ищите API, предоставляемое библиотекой libdb.

Функция dbopen(3) — это библиотечный интерфейс к файлам баз данных. Один из поддерживаемых форматов файлов — btree. Общее описание методов доступа к базам данных находится в dbopen(3). Эта справочная страница содержит только информацию, относящуюся к btree.

btree — это отсортированная, сбалансированная древовидная структура данных, содержащая связанные пары типа «ключ/данные».

Специальная структура метода доступа данных btree, к которой обращается dbopen(3), задана в <db.h> следующим образом:

```
typedef struct {

    unsigned long flags;

    unsigned int  cachesize;

    int           maxkeypage;

    int           minkeypage;

    unsigned int  psize;

    int         (*compare)(const DBT *key1, const DBT *key2);

    size_t      (*prefix)(const DBT *key1, const DBT *key2);

    int           lorder;
} BTREEINFO;
```

Элементы этой структуры имеют следующее назначение:

flags

Значение флага определяется как логическое ИЛИ следующих значений:

R_DUP

Разрешает повторяющиеся ключи в дереве, т. е. разрешает вставку, если вставляемый ключ уже существует в дереве. По умолчанию, как описано в dbopen(3), если ключ уже встречается в дереве, новые данные записываются «поверх» старых; или запись прерывается, если задан флаг со значением R_NOOVERWRITE. Флаг R_DUP перекрывается флагом R_NOOVERWRITE; если R_NOOVERWRITE задан, то попытка записи одинаковых ключей приведёт к ошибке.

Если база данных содержит дубликаты ключей, порядок получения пар ключ/данные не определён при использовании функции get, однако функция seq, вызванная с установленным флагом R_CURSOR, всегда возвращает ссылку на «первый» ключ в группе идентичных ключей.

cachesize

Предлагаемый максимальный размер (в байтах) для кэша в памяти. Это значение носит только рекомендательный характер, и при попытке доступа к данным может выделиться большее количество памяти во избежании ошибок. Так как при каждом поиске проверяется корневая страница дерева, кэшируются наиболее часто используемые страницы, что уменьшает время, необходимое для доступа к данным. В дополнение к этому, физическая запись на диск откладывается настолько, насколько это возможно, что значительно уменьшает количество операций ввода/вывода. Очевидно, использование кэша увеличивает (но только увеличивает) вероятность повреждения или потери изменённых данных при отказе системы. Если значение cachesize равно 0 (т. е., размер не указан), то используется размер кэша по умолчанию.

maxkeypage

Максимальное количество ключей, которые могут храниться на одной странице. В настоящее время данная возможность не реализована.

minkeypage

Минимальное количество ключей, которые могут храниться в одной странице. Это значение используется для определения какие ключи будут сохранены в страницах переполнения (overflow pages), т. е., если ключ или данные длиннее, чем значение pagesize, поделённое на величину minkeypage, то они будут сохранены в страницах переполнения, а не в самой странице. Если значение minkeypage равно 0 (минимальное количество ключей не определено), то величина принимается равной 2.

psize

Размер страницы (в байтах), используемой для узлов дерева Минимальный размер страницы — 512 байтов, максимальный — 64 КиБ. Если psize равно 0 (размер страницы не указан), то размер страницы выбирается на основе размера блока ввода/вывода задействованной файловой системы.

compare

Это функция сравнения ключей. Она возвращает целое значение, меньшее нуля, равное нулю или большее нуля, если первый аргумент соответственно меньше, равен или больше второго аргумента. При каждом открытии дерева для сравнения должна быть использована одинаковая функция. Если compare указывает на NULL (функция сравнения не определена), то ключи сравниваются лексически, т. е., короткие ключи меньше, чем длинные.

prefix

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

lorder

Порядок расположения байтов, используемый при хранении целых чисел в метаданных базы данных. Число должно отражать порядок размещения в виде целого значения; например, порядок «big endian» должен обозначаться числом 4321. Если lorder равно 0 (порядок не определён), то используется значение по умолчанию, принятое на машине.

Если файл уже существует (и не задан флаг O_TRUNC), то значения, определённые в параметрах flags, lorder и psize, игнорируются, приобретая значения, указанные при создании дерева.

Последовательное сканирование дерева производится от меньших ключей к большим.

Место, освобождённое при удалении из дерева пар ключ/данные, в дальнейшем никогда не возвращается, хотя и может использоваться снова. Это значит, что физический размер базы данных может только увеличиваться. Единственное решение — избегать чрезмерного удаления и регулярно создавать новое дерево при помощи полного сканирования старого.

Поиск, вставка и удаление из дерева выполняются за время O lg по основанию N, где основание — средняя скорость заполнения. Довольно часто вставка упорядоченных данных в дерево даёт не столь хорошие результаты, однако, данная реализация изменена так, что работа упорядоченных вставок оказывается наилучшей и во многом более быстрой, чем обычное заполнение.

## ОШИБКИ
Функции метода доступа btree могут завершиться с ошибкой и присвоить errno любое значение из определённых для библиотеки функций dbopen(3).

## ДЕФЕКТЫ
Поддерживаются значения только с прямым и обратным порядком байт.

## СМОТРИТЕ ТАКЖЕ
dbopen(3), hash(3), mpool(3), recno(3)

The Ubiquitous B-tree, Douglas Comer, ACM Comput. Surv. 11, 2 (June 1979), 121-138.

Prefix B-trees, Bayer and Unterauer, ACM Transactions on Database Systems, Vol. 2, 1 (March 1977), 11-26.

The Art of Computer Programming Vol. 3: Sorting and Searching, D.E. Knuth, 1968, pp 471-480.


byteorder

title: byteorder(3)

summary: переводят данные из узлового порядка

text:
# byteorder(3)

## ИМЯ
htonl, htons, ntohl, ntohs - переводят данные из узлового порядка расположения байтов в сетевой и наоборот

## ОБЗОР

```
#include <arpa/inet.h>
```

```
uint32_t htonl(uint32_t hostlong);
```

```
uint16_t htons(uint16_t hostshort);
```

```
uint32_t ntohl(uint32_t netlong);
```

```
uint16_t ntohs(uint16_t netshort);
```

## ОПИСАНИЕ
Функция htonl() преобразует значение беззнакового целого hostlong из узлового порядка расположения байтов в сетевой порядок расположения байтов.

Функция htons() преобразует значение короткого беззнакового целого hostshort из узлового порядка расположения байтов в сетевой порядок расположения байтов.

Функция ntohl() преобразует значение беззнакового целого netlong из сетевого порядка расположения байтов в узловой порядок расположения байтов.

Функция ntohs() преобразует значение короткого беззнакового целого netshort из сетевого порядка расположения байтов в узловой порядок расположения байтов.

В архитектуре i386 используется узловой порядок расположения байтов — последний значимый байт стоит в начале числа (Least Significant Byte), в то время как сетевым порядком байт, используемым в интернет, считается Most Significant Byte (в начале числа стоит последний значимый байт).

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

Интерфейс

Атрибут

Значение

htonl(), htons(), ntohl(), ntohs()

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

MT-Safe

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

В некоторых ОС требуется включать <netinet/in.h> вместо <arpa/inet.h>.

## СМОТРИТЕ ТАКЖЕ
bswap(3), endian(3), gethostbyname(3), getservent(3)


bzero

title: bzero(3)

summary: обнуляет строку байт

text:
# bzero(3)

## ИМЯ
bzero, explicit_bzero - обнуляет строку байт

## ОБЗОР

```
#include <strings.h>
```

```
void bzero(void *s, size_t n);
```

```
#include <string.h>
```

```
void explicit_bzero(void *s, size_t n);
```

## ОПИСАНИЕ
Функция bzero() стирает данные длиной n байт в памяти, начиная с места, указанного в s, записывая в эту область нули (байты '\0').

Функция explicit_bzero() выполняет ту же задачу что и bzero(). Она отличается от bzero() тем, что гарантирует выполнение операции стирания, что есть при оптимизации компилятор её не удалит, если решит, что операция «не нужна».

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Нет.

## ВЕРСИИ
Функция explicit_bzero() впервые появилась в glibc 2.25.

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

Интерфейс

Атрибут

Значение

bzero(), explicit_bzero()

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

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
Функция bzero() устарела (отмечена как LEGACY в POSIX.1-2001): в новых программах следует использовать memset(3). В POSIX.1-2008 определение bzero() удалено. Впервые функция bzero() появилась в 4.3BSD.

Функция explicit_bzero() является нестандартным расширением, которое также имеется в некоторых BSD. В других реализациях есть подобная функция, например memset_explicit() или memset_s().

## ЗАМЕЧАНИЯ
Функция explicit_bzero() призвана решить проблему с безопасностью, которая может возникнуть у приложений при использовании bzero(): если компилятор решит, что обнуляемое расположение больше никогда не будет использовано правильной программой, то он может удалить вызов bzero(). Это проблема, если целью вызова bzero() было стирание конфиденциальных данных (например, паролей) для предотвращения их возможной утечки из-за некорректной или взломанной программы. Вызовы explicit_bzero() никогда не удаляются компилятором.

Функция explicit_bzero() не решает всех проблем, связанных со стиранием конфиденциальных данных:

1.

Функция explicit_bzero() не гарантирует, что конфиденциальные данные полностью стираются из памяти (тоже верно и для bzero()). Например, остаётся много копий конфиденциальных данных в регистрах и временных областях стека. Функция explicit_bzero() не учитывает эти копии и не стирает их.

2.

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

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

Несмотря на вышеупомянутые детали, для безопасности в приложениях лучше всё же использовать explicit_bzero(). Разработчики explicit_bzero() ожидают, что в будущем компиляторы будут учитывать вызовы explicit_bzero() и предпринимать шаги по стиранию всех копий конфиденциальных данных, включая копии в регистрах или во временных областях стека.

## СМОТРИТЕ ТАКЖЕ
bstring(3), memset(3), swab(3)


cabs

title: cabs(3)

text:
# cabs(3)

## ИМЯ
cabs, cabsf, cabsl - вычисление абсолютного значения комплексного числа

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

double cabs(double complex z);

float cabsf(float complex z);

long double cabsl(long double complex z);

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

## ОПИСАНИЕ
Эти функции возвращают абсолютное значение комплексного числа z. Результатом является вещественное число.

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

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

Интерфейс

Атрибут

Значение

cabs(), cabsf(), cabsl()

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

MT-Safe

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

## ЗАМЕЧАНИЯ
Фактически функция является псевдонимом для hypot(a, b) (или эквивалентному sqrt(a*a + b*b)).

## СМОТРИТЕ ТАКЖЕ
abs(3), cimag(3), hypot(3), complex(7)


cacos

title: cacos(3)

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

text:
# cacos(3)

## ИМЯ
cacos, cacosf, cacosl - вычисляет комплексный арккосинус

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

double complex cacos(double complex z);

float complex cacosf(float complex z);

long double complex cacosl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют арккосинус комплексного числа z. Если y = cacos(z), то z = ccos(y). Реальная часть y лежит в интервале [0,pi].

Формула вычисления:

```
    cacos(z) = -i * clog(z + i * csqrt(1 - z * z))
```

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

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

Интерфейс

Атрибут

Значение

cacos(), cacosf(), cacosl()

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

MT-Safe

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

## ПРИМЕР

```
/* Компонуется при указании параметра «-lm» */
#include <complex.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{

    double complex z, c, f;

    double complex i = I;

    if (argc != 3) {

        fprintf(stderr, "Использование: %s <real> <imag>\n", argv[0]);

        exit(EXIT_FAILURE);

    }

    z = atof(argv[1]) + atof(argv[2]) * I;

    c = cacos(z);

    printf("cacos() = %6.3f %6.3f*i\n", creal(c), cimag(c));

    f = -i * clog(z + i * csqrt(1 - z * z));

    printf("formula = %6.3f %6.3f*i\n", creal(f), cimag(f));

    exit(EXIT_SUCCESS);
}
```

## СМОТРИТЕ ТАКЖЕ
ccos(3), clog(3), complex(7)


cacosh

title: cacosh(3)

summary: вычисление гиперболического арккосинуса

text:
# cacosh(3)

## ИМЯ
cacosh, cacoshf, cacoshl - вычисление гиперболического арккосинуса комплексного числа

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

double complex cacosh(double complex z);

float complex cacoshf(float complex z);

long double complex cacoshl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют гиперболический арккосинус от комплексного числа z. Если y = cacosh(z), то z = ccosh(y). Мнимая часть y лежит в интервале [-pi,pi]. Реальная часть y неотрицательна.

Формула вычисления:

```
    cacosh(z) = 2 * clog(csqrt((z + 1) / 2) + csqrt((z - 1) / 2))
```

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

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

Интерфейс

Атрибут

Значение

cacosh(), cacoshf(), cacoshl()

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

MT-Safe

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

## ПРИМЕР

```
/* Компонуется при указании параметра «-lm» */
#include <complex.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{

    double complex z, c, f;

    if (argc != 3) {

        fprintf(stderr, "Использование: %s <real> <imag>\n", argv[0]);

        exit(EXIT_FAILURE);

    }

    z = atof(argv[1]) + atof(argv[2]) * I;

    c = cacosh(z);

    printf("cacosh() = %6.3f %6.3f*i\n", creal(c), cimag(c));

    f = 2 * clog(csqrt((z + 1)/2) + csqrt((z - 1)/2));

    printf("formula  = %6.3f %6.3f*i\n", creal(f2), cimag(f2));

    exit(EXIT_SUCCESS);
}
```

## СМОТРИТЕ ТАКЖЕ
acosh(3), cabs(3), ccosh(3), cimag(3), complex(7)


title: canonicalize_file_name(3)

text:
# canonicalize_file_name(3)

## ИМЯ
canonicalize_file_name - возвращает канонизированный абсолютный путь

## ОБЗОР
\#define _GNU_SOURCE /* смотрите feature_test_macros(7) */

\#include <stdlib.h>

char *canonicalize_file_name(const char *path);

## ОПИСАНИЕ
Функция canonicalize_file_name() возвращает строку, завершающуюся null, содержащую канонизированный абсолютный путь соответствующего path. В возвращаемой строке раскрываются символьные ссылки, а также компоненты пути . и ... Стоящие подряд символы косой черты (/) заменяются одной чертой.

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

Вызов canonicalize_file_name(path) эквивалентен вызову:

realpath(path, NULL);

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При нормальном завершении работы canonicalize_file_name() возвращает строку с null в конце. При ошибке (например, компонент пути невозможно прочитать или он не существует), canonicalize_file_name() возвращает NULL и устанавливает в errno соответствующее значение ошибки.

## ОШИБКИ
Смотрите realpath(3).

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

Интерфейс

Атрибут

Значение

canonicalize_file_name()

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

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
Эта функция является расширением GNU.

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


carg

title: carg(3)

summary: вычисляет комплексный аргумент

text:
# carg(3)

## ИМЯ
carg, cargf, cargl - вычисляет комплексный аргумент

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

double carg(double complex z);

float cargf(float complex z);

long double cargl(long double complex z);

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

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

Комплексное число может быть описано двумя действительными координатами. Для этого можно использовать прямоугольные координаты и получить

```
    z = x + I * y
```

где x = creal(z) и y = cimag(z).

Также можно использовать полярные координаты и получить

```
    z = r * cexp(I * a)
```

где r = cabs(z) — «радиус», «модуль» или абсолютное значение z, и a = carg(z) — «фазовый угол», или аргумент z.

Формула вычисления:

```
    tan(carg(z)) = cimag(z) / creal(z)
```

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Возвращаемое значение лежит в диапазоне [-pi,pi].

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

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

Интерфейс

Атрибут

Значение

carg(), cargf(), cargl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), complex(7)


casin

title: casin(3)

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

text:
# casin(3)

## ИМЯ
casin, casinf, casinl - вычисляет комплексный арксинус

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

double complex casin(double complex z);

float complex casinf(float complex z);

long double complex casinl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют синус комплексного числа z. Если y = casin(z), то z = csin(y). Реальная часть y лежит в интервале [-pi/2,pi/2].

Формула вычисления:

```
    casin(z) = -i clog(iz + csqrt(1 - z * z))
```

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

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

Интерфейс

Атрибут

Значение

casin(), casinf(), casinl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
clog(3), csin(3), complex(7)


casinh

title: casinh(3)

summary: вычисление гиперболического арксинуса

text:
# casinh(3)

## ИМЯ
casinh, casinhf, casinhl - вычисление гиперболического арксинуса комплексного числа

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

double complex casinh(double complex z);

float complex casinhf(float complex z);

long double complex casinhl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют гиперболический синус комплексного числа z. Если y = casinh(z), то z = csinh(y). Мнимая часть y лежит в интервале [-pi/2,pi/2].

Формула вычисления:

```
    casinh(z) = clog(z + csqrt(z * z + 1))
```

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

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

Интерфейс

Атрибут

Значение

casinh(), casinhf(), casinhl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
asinh(3), cabs(3), cimag(3), csinh(3), complex(7)


catan

title: catan(3)

text:
# catan(3)

## ИМЯ
catan, catanf, catanl - вычисление арктангенса комплексного числа

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

double complex catan(double complex z);

float complex catanf(float complex z);

long double complex catanl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют арктангенс комплексного числа z. Если y = catan(z), то z = ctan(y). Реальная часть y лежит в интервале [-pi/2,pi/2].

Формула вычисления:

```
    catan(z) = (clog(1 + i * z) - clog(1 - i * z)) / (2 * i)
```

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

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

Интерфейс

Атрибут

Значение

catan(), catanf(), catanl()

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

MT-Safe

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

## ПРИМЕР

```
/* Компонуется при указании параметра «-lm» */
#include <complex.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{

    double complex z, c, f;

    double complex i = I;

    if (argc != 3) {

        fprintf(stderr, "Использование: %s <real> <imag>\n", argv[0]);

        exit(EXIT_FAILURE);

    }

    z = atof(argv[1]) + atof(argv[2]) * I;

    c = catan(z);

    printf("catan() = %6.3f %6.3f*i\n", creal(c), cimag(c));

    f = (clog(1 + i * z) - clog(1 - i * z)) / (2 * i);

    printf("formula = %6.3f %6.3f*i\n", creal(f2), cimag(f2));

    exit(EXIT_SUCCESS);
}
```

## СМОТРИТЕ ТАКЖЕ
ccos(3), clog(3), ctan(3), complex(7)


catanh

title: catanh(3)

text:
# catanh(3)

## ИМЯ
catanh, catanhf, catanhl - вычисление комплексного гиперболического арктангенса

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

double complex catanh(double complex z);

float complex catanhf(float complex z);

long double complex catanhl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют гиперболический арктангенс комплексного числа z. Если y = catanh(z), то z = ctanh(y). Мнимая часть y лежит в интервале [-pi/2,pi/2].

Формула вычисления:

```
    catanh(z) = 0.5 * (clog(1 + z) - clog(1 - z))
```

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

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

Интерфейс

Атрибут

Значение

catanh(), catanhf(), catanhl()

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

MT-Safe

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

## ПРИМЕР

```
/* Компонуется при указании параметра «-lm» */
#include <complex.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{

    double complex z, c, f;

    if (argc != 3) {

        fprintf(stderr, "Использование: %s <real> <imag>\n", argv[0]);

        exit(EXIT_FAILURE);

    }

    z = atof(argv[1]) + atof(argv[2]) * I;

    c = catanh(z);

    printf("catanh() = %6.3f %6.3f*i\n", creal(c), cimag(c));

    f = 0.5 * (clog(1 + z) - clog(1 - z));

    printf("formula  = %6.3f %6.3f*i\n", creal(f2), cimag(f2));

    exit(EXIT_SUCCESS);
}
```

## СМОТРИТЕ ТАКЖЕ
atanh(3), cabs(3), cimag(3), ctanh(3), complex(7)


catgets

title: catgets(3)

text:
# catgets(3)

## ИМЯ
catgets - получает сообщение из каталога сообщений

## ОБЗОР

```
#include <nl_types.h>
```

```
char *catgets(nl_catd catalog, int set_number, int message_number,
              const char *message);
```

## ОПИСАНИЕ
Функция catgets() читает сообщение номер message_number в наборе номеров set_number, из каталога сообщений, обозначенного как catalog, где catalog — это дескриптор каталога, полученный ранее вызовом функции catopen(3). Четвертый аргумент, message, является указателем на строку с сообщением по умолчанию, которую вернёт catgets() в случае, если указанный каталог сообщений недоступен. Текст сообщений хранится во внутреннем буфере и должен быть скопирован приложением, если оно должно быть изменено или сохранено. Возвращаемая строка всегда заканчивается байтом null ('\0').

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении catgets() возвращает указатель на внутренний буфер, содержащий заканчивающуюся null строку с сообщением. Если сообщение не найдено, то catgets() возвращает значение message.

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

Интерфейс

Атрибут

Значение

catgets()

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

MT-Safe

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

## ЗАМЕЧАНИЯ
Функция catgets() доступна только в libc.so.4.4.4c и более поздних версиях. В январе 1987 года в X/Open Portability Guide определены более точные сообщения об ошибках: message возвращается, если каталог catalog недоступен; если возвращена пустая строка, то каталог доступен, но не содержит данных о сообщении. Эти две возможные ситуации, похоже, не учтены в XSUSv2, и в случае ошибки всегда возвращается message.

## СМОТРИТЕ ТАКЖЕ
catopen(3), setlocale(3)


catopen

title: catopen(3)

summary: открывает/закрывает каталог сообщений

text:
# catopen(3)

## ИМЯ
catopen, catclose - открывает/закрывает каталог сообщений

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

nl_catd catopen(const char *name, int flag);

int catclose(nl_catd catalog);

## ОПИСАНИЕ
Функция catopen() открывает каталог сообщений и возвращает дескриптор каталога. Дескриптор остаётся действительным до вызова catclose() или execve(2). Если для реализации дескрипторов каталогов используется файловый дескриптор, то для него будет установлен флаг FD_CLOEXEC.

В аргументе name указывается имя каталога сообщений, который необходимо открыть. Если в name задаётся абсолютный путь (т.е., содержащий символ '/'), то name определяет путь к каталогу сообщений. Иначе используется переменная окружения NLSPATH, в которой символ %N заменяется значением name (смотрите locale(7)). Не определено, будет ли использоваться NLSPATH, если процесс имеет права root. Если NLSPATH отсутствует в окружении или если каталог сообщений не может быть открыт ни по одному из путей, указанных в этой переменной, то используется путь, зависящий от реализации. Он может зависеть от настройки локали LC_MESSAGES в случае, когда аргумент flag имеет значение NL_CAT_LOCALE или от переменной окружения LANG в случае, когда аргумент flag равен 0. Изменение части локали в LC_MESSAGES может привести к признанию дескрипторов открытых каталогов недействительными.

В аргументе flag функции catopen() задаётся источник используемого языка. Если его значение равно NL_CAT_LOCALE, то для LC_MESSAGES будет использована текущая локаль. В противном случае будет использована переменная окружения LANG.

Функция catclose() закрывает каталог сообщений, указанный в catalog. Все последующие обращения к каталогу сообщений, определяемому catalog, считаются ошибкой.

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

При успешном выполнении функция catclose() возвращает 0, а в случае ошибки значение -1.

## ОКРУЖЕНИЕ
LC_MESSAGES

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

LANG

Язык, используемый в случае, когда flag равен 0.

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

Интерфейс

Атрибут

Значение

catopen()

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

MT-Safe env

catclose()

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

MT-Safe

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

## ЗАМЕЧАНИЯ
Описание выше соответствует POSIX.1. В glibc значение NL_CAT_LOCALE равно. Путь, используемый по умолчанию, варьируется, но, обычно, представляет собой различные подкаталоги /usr/share/locale.

## СМОТРИТЕ ТАКЖЕ
catgets(3), setlocale(3)


cbrt

title: cbrt(3)

summary: функция вычисления кубического корня

text:
# cbrt(3)

## ИМЯ
cbrt, cbrtf, cbrtl - функция вычисления кубического корня

## ОБЗОР

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

```
double cbrt(double x);
float cbrtf(float x);
long double cbrtl(long double x);
```

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

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

cbrt():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

|| _XOPEN_SOURCE >= 500

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

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

cbrtf(), cbrtl(): _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

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

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

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

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

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

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

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

Интерфейс

Атрибут

Значение

cbrt(), cbrtf(), cbrtl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
pow(3), sqrt(3)


ccos

title: ccos(3)

summary: вычисляет комплексный косинус

text:
# ccos(3)

## ИМЯ
ccos, ccosf, ccosl - вычисляет комплексный косинус

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

double complex ccos(double complex z);

float complex ccosf(float complex z);

long double complex ccosl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют комплексный косинус z.

Функция комплексного косинуса определяется как:

```
    ccos(z) = (exp(i * z) + exp(-i * z)) / 2
```

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

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

Интерфейс

Атрибут

Значение

ccos(), ccosf(), ccosl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), cacos(3), csin(3), ctan(3), complex(7)


ccosh

title: ccosh(3)

text:
# ccosh(3)

## ИМЯ
ccosh, ccoshf, ccoshl - вычисление комплексного гиперболического косинуса

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

double complex ccosh(double complex z);

float complex ccoshf(float complex z);

long double complex ccoshl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют комплексный гиперболический косинус z.

Функция вычисления гиперболического косинуса комплексного числа определена формулой:

```
    ccosh(z) = (exp(z)+exp(-z))/2
```

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

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), cacosh(3), csinh(3), ctanh(3), complex(7)


ceil

title: ceil(3)

text:
# ceil(3)

## ИМЯ
ceil, ceilf, ceill - функции округления до наименьшего целого, не меньшего, чем аргумент

## ОБЗОР

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

```
double ceil(double x);
float ceilf(float x);
long double ceill(long double x);
```

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

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

ceilf(), ceill():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

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

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

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

Например, результатом ceil(0.5) будет 1.0, а ceil(-0.5) равно -0.0.

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

Если x целое, +0, -0, NaN или стремится к бесконечности, то будет возвращено значение x.

## ОШИБКИ
Ошибки не возникают. В документах POSIX.1-2001 описывается ошибка диапазона при переполнениях, однако см. ЗАМЕЧАНИЯ.

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

Интерфейс

Атрибут

Значение

ceil(), ceilf(), ceill()

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

MT-Safe

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

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

## ЗАМЕЧАНИЯ
В SUSv2 и POSIX.1-2001 есть текст о переполнении (которое может установить errno в ERANGE или вызвать исключение FE_OVERFLOW). На практике, результат не может выйти за диапазон ни на каком компьютере, поэтому обработка этой ошибки не имеет смысла (точнее говоря, переполнение возможно только в том случае, когда максимальное значение экспоненты меньше числа бит мантиссы. В стандарте IEEE-754 для 32- и 64-битных чисел с плавающей точкой максимальное значение экспоненты равно 128 и 1024 соответственно, а число бит мантиссы — 24 и 53 соответственно).

Целая часть, возвращаемая этими функциями, может быть слишком большой для целого типа (int, long и так далее). Чтобы избежать переполнения, которое может привести к неопределенным результатам, приложение должно осуществлять проверку возвращаемого размера значения до того, как присвоить его целому типу.

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


cexp

title: cexp(3)

summary: функция комплексной экспоненты

text:
# cexp(3)

## ИМЯ
cexp, cexpf, cexpl - функция комплексной экспоненты

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

double complex cexp(double complex z);

float complex cexpf(float complex z);

long double complex cexpl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют e (2.71828…, основание натурального логарифма), возведённое в степень z.

Формула вычисления:

```
    cexp(I * z) = ccos(z) + I * csin(z)
```

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

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

Интерфейс

Атрибут

Значение

cexp(), cexpf(), cexpl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), cexp2(3), clog(3), cpow(3), complex(7)


title: cexp2(3)

text:
# cexp2(3)

## ИМЯ
cexp2, cexp2f, cexp2l - экспонента по основанию 2 для комплексного числа

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

double complex cexp2(double complex z);

float complex cexp2f(float complex z);

long double complex cexp2l(long double complex z);

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

## ОПИСАНИЕ
Функция возвращает значение числа 2 в степени z.

## СООТВЕТСТВИЕ СТАНДАРТАМ
Имена функций зарезервированы для будущего использования в C99.

## ДОСТУПНОСТЬ
Пока не в glibc (версия 2.19).

## СМОТРИТЕ ТАКЖЕ
cabs(3), cexp(3), clog10(3), complex(7)


cfree

title: cfree(3)

summary: освобождает выделенную память

text:
# cfree(3)

## ИМЯ
cfree - освобождает выделенную память

## ОБЗОР

```
#include <stdlib.h>
```

```
/* в SunOS 4 */
int cfree(void *ptr);
```

```
/* в glibc или FreeBSD libcompat */
void cfree(void *ptr);
```

```
/* в SCO OpenServer */
void cfree(char *ptr, unsigned num, unsigned size);
```

```
/* в Solaris watchmalloc.so.1 */
void cfree(void *ptr, size_t nelem, size_t elsize);
```

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

cfree():

начиная с glibc 2.19:

_DEFAULT_SOURCE

в glibc 2.19 и старее:

_BSD_SOURCE || _SVID_SOURCE

## ОПИСАНИЕ
Эту функцию использовать нельзя. Используйте вместо неё free(3). Начиная с версии 2.26, она удалена из glibc.

### cfree с 1 аргументом
В glibc функция cfree() является синонимом free(3), которая "добавлена для совместимости с SunOS".

В других системах есть другие функции с таким же именем. Объявление функции приводится иногда в <stdlib.h>, а иногда <malloc.h>.

### cfree с 3 аргументами
В некоторых версиях SCO и Solaris есть версии malloc с cfree() с тремя аргументами, по аналогии с calloc(3).

Если она нужна вам при переносе чего-либо, добавьте

```
#define cfree(p, n, s) free((p))
```

в свой файл.

Часто задается вопрос: "Могу ли я использовать free(3) для освобождения памяти, выделенной с помощью calloc(3), или нужно использовать cfree()?" Ответ: используйте free(3).

В руководстве SCO написано: "Функция cfree доступна для соответствия стандарту iBCSe2, она просто вызывает free. Аргументы num и size функцией cfree не используются".

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Версия cfree() из SunOS (которая является синонимом free(3)) возвращает 1 в случае успеха и 0 - в случае ошибки. В случае ошибки errno устанавливается в значение EINVAL: значение ptr не является указателем на блок, ранее выделенным с помощью одной из функций из семейства malloc(3).

## ВЕРСИИ
Функция cfree() была удалена из glibc версии 2.26.

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

Интерфейс

Атрибут

Значение

cfree()

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

MT-Safe /* в glibc */

## СООТВЕТСТВИЕ СТАНДАРТАМ
Версия cfree() с тремя аргументами, используемая в SCO, соответствует стандарту iBCSe2, Intel386 Binary Compatibility Specification, Edition 2.

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


cimag

title: cimag(3)

text:
# cimag(3)

## ИМЯ
cimag, cimagf, cimagl - получение мнимой части комплексного числа

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

double cimag(double complex z);

float cimagf(float complex z);

long double cimagl(long double complex z);

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

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

Формула вычисления:

```
    z = creal(z) + I * cimag(z)
```

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

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

Интерфейс

Атрибут

Значение

cimag(), cimagf(), cimagl()

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

MT-Safe

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

## ЗАМЕЧАНИЯ
gcc также поддерживает __imag__ Это расширение GNU.

## СМОТРИТЕ ТАКЖЕ
cabs(3), creal(3), complex(7)


clearenv

title: clearenv(3)

summary: очищает окружение

text:
# clearenv(3)

## ИМЯ
clearenv - очищает окружение

## ОБЗОР

```
#include <stdlib.h>
```

```
int clearenv(void);
```

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

clearenv():

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

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

## ОПИСАНИЕ
Функция clearenv() очищает окружение от всех пар имя-значение и устанавливает значение внешней переменной environ равным NULL. После этого вызова новые переменные можно добавлять в окружение с помощью putenv(3) и setenv(3).

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

## ВЕРСИИ
Доступна в glibc с версии 2.0.

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

Интерфейс

Атрибут

Значение

clearenv()

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

MT-Unsafe const:env

## СООТВЕТСТВИЕ СТАНДАРТАМ
Есть в различных версиях UNIX (DG/UX, HP-UX, QNX, …) В POSIX.9 (привязки для FORTRAN77). В POSIX.1-1996 функции clearenv() и putenv() не приняты, но указано, что они войдут в следующие версии стандарта (смотрите §B.4.6.1). Однако, в POSIX.1-2001 добавлена только putenv(), а clearenv() — отклонена.

## ЗАМЕЧАНИЯ
В системах, где clearenv() отсутствует, присваивайте

```
environ = NULL;
```

самостоятельно.

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

Заметим, что главным свойством clearenv() является присвоение значения указателю environ(7); эта функция не стирает содержимое буферов, содержащих само окружение.

В справочных страницах DG/UX и Tru64 написано: если environ изменялась не с помощью функций putenv(3), getenv(3) или clearenv(), то clearenv() возвратит ошибку и окружение процесса не будет изменено.

## СМОТРИТЕ ТАКЖЕ
getenv(3), putenv(3), setenv(3), unsetenv(3), environ(7)


clock

title: clock(3)

summary: вычисляет процессорное время

text:
# clock(3)

## ИМЯ
clock - вычисляет процессорное время

## ОБЗОР

```
#include <time.h>
```

```
clock_t clock(void);
```

## ОПИСАНИЕ
Функция clock() возвращает приблизительное процессорное время, использованное программой.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Возвращаемое значение — это время, затраченное процессором на выполнение программы, представленное типом clock_t. Чтобы узнать количество затраченных на выполнение секунд, разделите возвращенное значение на CLOCKS_PER_SEC. Если затраченное процессором время недоступно или если его значение не может быть определено, то функция возвращает значение (clock_t) -1.

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

Интерфейс

Атрибут

Значение

clock()

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

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C89, C99. В XSI требуется, чтобы CLOCKS_PER_SEC было равно 1000000 вне зависимости от действительной точности.

## ЗАМЕЧАНИЯ
Стандарт Си разрешает выдавать произвольные значения времени при старте программы; поэтому вычтите из возвращенного функцией clock() значения её значение при старте и используйте разницу для обеспечения максимальной переносимости.

Заметим, что время может превысить свое максимальное значение. В 32-битных системах, где CLOCKS_PER_SEC равно 1000000, функция clock() возвращает одно и то же значение примерно каждые 72 минуты.

В некоторых других реализациях значение, возвращаемое clock(), также включает в себя время всех дочерних процессов, чьи состояния были собраны через wait(2) (или другие системные вызовы типа wait). Linux не включает время ожидающих потомков в значение, возвращаемое clock(). Возможно, предпочтительнее использовать функцию times(2), явно возвращающую (отдельно) информацию о вызвавшем функцию и его дочерних процессах.

В glibc 2.17 и старее, функция clock() работает на основе times(2). Для повышения точности, начиная с glibc 2.18, она реализуется через clock_gettime(2) (используются часы CLOCK_PROCESS_CPUTIME_ID).

## СМОТРИТЕ ТАКЖЕ
clock_gettime(2), getrusage(2), times(2)


title: clock_getcpuclockid(3)

text:
# clock_getcpuclockid(3)

## ИМЯ
clock_getcpuclockid - возвращает ID процессорных часов процесса

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

```
int clock_getcpuclockid(pid_t pid, clockid_t *clock_id);
```

Компонуется при указании параметра -lrt (только для glibc до версии 2.17).

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

clock_getcpuclockid():

_POSIX_C_SOURCE >= 200112L

## ОПИСАНИЕ
Функция clock_getcpuclockid() возвращает ID процессорных часов процесса с заданным pid в виде указателя в clock_id. Если значение pid равно 0, то возвращается ID процессорных часов вызывающего процесса.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении clock_getcpuclockid() возвращает 0; при ошибке возвращается одно из положительных значений ошибки, перечисленных в разделе ОШИБКИ.

## ОШИБКИ
ENOSYS

Ядро не поддерживает возврат процессорных часов другого процесса и значение pid не указывает на вызывающий процесс.

EPERM

Вызывающий не имеет прав доступа к процессорным часам процесса, указанного в pid (определено в POSIX.1-2001; не возникает в Linux, если ядро не собрано с поддержкой получения процессорных часов процесса, отличного от вызывающего).

ESRCH

Процесс с идентификатором pid не найден.

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

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

Интерфейс

Атрибут

Значение

clock_getcpuclockid()

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

MT-Safe

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

## ЗАМЕЧАНИЯ
Вызов clock_gettime(2) с ID часов, полученных от вызова clock_getcpuclockid() с pid равным 0, делает то же, что и с ID часов, равным CLOCK_PROCESS_CPUTIME_ID.

## ПРИМЕР
Представленный ниже пример программы возвращает ID процессорных часов процесса, чей ID указан в командной строке, а затем используется clock_gettime(2) для получения времени этих часов. Пример запуска:

```
$ ./a.out 1              # показать процессорные часы процесса init
Процессорные часы для PID 1 показывают 2.213466748 секунд
```

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

```
#define _XOPEN_SOURCE 600
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
int
main(int argc, char *argv[])
{

    clockid_t clockid;

    struct timespec ts;

    if (argc != 2) {

        fprintf(stderr, "%s <ID_процесса>\n", argv[0]);

        exit(EXIT_FAILURE);

    }

    if (clock_getcpuclockid(atoi(argv[1]), &clockid) != 0) {

        perror("clock_getcpuclockid");

        exit(EXIT_FAILURE);

    }

    if (clock_gettime(clockid, &ts) == -1) {

        perror("clock_gettime");

        exit(EXIT_FAILURE);

    }

    printf("процессорные часы для PID %s показывают %ld.%09ld секунд\n",

            argv[1], (long) ts.tv_sec, (long) ts.tv_nsec);

    exit(EXIT_SUCCESS);
}
```

## СМОТРИТЕ ТАКЖЕ
clock_getres(2), timer_create(2), pthread_getcpuclockid(3), time(7)


title: clock_getres(3)

text:
# clock_getres(3)

See the file man2/clock_getres.2.


title: clock_gettime(3)

text:
# clock_gettime(3)

See the file man2/clock_getres.2.


title: clock_settime(3)

text:
# clock_settime(3)

See the file man2/clock_getres.2.


clog

title: clog(3)

summary: натуральный логарифм комплексного числа

text:
# clog(3)

## ИМЯ
clog, clogf, clogl - натуральный логарифм комплексного числа

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

double complex clog(double complex z);

float complex clogf(float complex z);

long double complex clogl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют комплексный натуральный логарифм z с обрезанием ветви вдоль отрицательной действительной оси.

Логарифм clog() является обратной функцией для экспоненты cexp(3). Таким образом, если y = clog(z), то z = cexp(y). Мнимая часть y выбирается из интервала [-pi,pi].

Формула вычисления:

```
    clog(z) = log(cabs(z)) + I * carg(z)
```

Заметим, что z, близкое к нулю, вызовет переполнение.

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

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

Интерфейс

Атрибут

Значение

clog(), clogf(), clogl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), cexp(3), clog10(3), clog2(3), complex(7)


title: clog10(3)

text:
# clog10(3)

## ИМЯ
clog10, clog10f, clog10l - вычисление десятичного логарифма комплексного числа

## ОБЗОР
\#define _GNU_SOURCE /* смотрите feature_test_macros(7) */

\#include <complex.h>

double complex clog10(double complex z);

float complex clog10f(float complex z);

long double complex clog10l(long double complex z);

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

## ОПИСАНИЕ
Вызов clog10(z) равнозначен следующему:

clog(z)/log(10)

или:

log10(cabs(c)) + I * carg(c) / log(10)

Другие функции выполняют ту же задачу для типов float и long double.

Заметим, что z, близкое к нулю, вызовет переполнение.

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

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

Интерфейс

Атрибут

Значение

clog10(), clog10f(), clog10l()

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

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
Эти функции являются расширениями GNU. Идентификаторы зарезервированы для будущего использования в C99 и C11.

## СМОТРИТЕ ТАКЖЕ
cabs(3), cexp(3), clog(3), clog2(3), complex(7)


title: clog2(3)

text:
# clog2(3)

## ИМЯ
clog2, clog2f, clog2l - логарифм по основанию 2 комплексного числа

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

double complex clog2(double complex z);

float complex clog2f(float complex z);

long double complex clog2l(long double complex z);

## ОПИСАНИЕ
Функция clog2(z) эквивалентна clog(z)/log(2).

Другие функции выполняют ту же задачу для типов float и long double.

Заметим, что z, близкое к нулю, вызовет переполнение.

## СООТВЕТСТВИЕ СТАНДАРТАМ
Имена функций зарезервированы для будущего использования в C99.

## ДОСТУПНОСТЬ
Пока не в glibc (версия 2.19).

## СМОТРИТЕ ТАКЖЕ
cabs(3), cexp(3), clog(3), clog10(3), complex(7)


closedir

title: closedir(3)

summary: закрыть каталог

text:
# closedir(3)

## ИМЯ
closedir - закрыть каталог

## ОБЗОР

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

```
#include <dirent.h>
```

```
int closedir(DIR *dirp);
```

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

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

## ОШИБКИ
EBADF

Неверный дескриптор потока каталога dirp.

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

Интерфейс

Атрибут

Значение

closedir()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
close(2), opendir(3), readdir(3), rewinddir(3), scandir(3), seekdir(3), telldir(3)


cmsg

title: cmsg(3)

summary: доступ к

text:
# cmsg(3)

## ИМЯ
CMSG_ALIGN, CMSG_SPACE, CMSG_NXTHDR, CMSG_FIRSTHDR - доступ к вспомогательным данным

## ОБЗОР

```
#include <sys/socket.h>
struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *msgh);
struct cmsghdr *CMSG_NXTHDR(struct msghdr *msgh ,
                            struct cmsghdr *cmsg);
size_t CMSG_ALIGN(size_t length);
size_t CMSG_SPACE(size_t length);
size_t CMSG_LEN(size_t length);
unsigned char *CMSG_DATA(struct cmsghdr *cmsg);
```

## ОПИСАНИЕ
Эти макросы используются для создания сообщений контроля доступа (также называемых вспомогательными данными), которые не являются частью полезной нагрузки сокета. Эта управляющая информация может содержать интерфейс, с которого получен пакет, различные редко используемые поля заголовков и расширенное описание ошибок, наборы файловых дескрипторов или параметров доступа (credentials) UNIX. Например, управляющие сообщения могут быть использованы для отправки дополнительных полей заголовков, таких, как параметры IP. Вспомогательные данные посылаются с помощью вызова sendmsg(2) и принимаются посредством вызова recvmsg(2). Более полная информация приведена в их справочных страницах.

Вспомогательные данные представляют собой последовательность структур cmsghdr с присоединёнными к ней данными. Возможные типы управляющих сообщений смотрите в соответствующих страницах протоколов. Максимально возможный размер буфера вспомогательных данных одного сокета можно установить через /proc/sys/net/core/optmem_max; смотрите socket(7).

Структура cmsghdr определена следующим образом:

```
struct cmsghdr {

    size_t cmsg_len;    /* счетчик байтов данных с заголовком

                           (тип — socklen_t в POSIX) */

    int    cmsg_level;  /* начальный протокол */

    int    cmsg_type;   /* тип, зависящий от протокола */
/* после

   unsigned char cmsg_data[]; */
};
```

К последовательности структур cmsghdr нельзя обращаться напрямую. Для этого используйте следующие макросы:

- Макрос CMSG_FIRSTHDR() возвращает указатель на первый cmsghdr в буфере вспомогательных данных, связанных с переданным cmsghdr. Он возвращает NULL, если в буфере недостаточно места для cmsghdr.

- Макрос CMSG_NXTHDR() возвращает следующее значение cmsghdr после переданного cmsghdr. Он возвращает NULL, если в буфере недостаточно места.

Для правильной работы CMSG_NXTHDR() при инициализации буфера, который будет содержать набор структур cmsghdr (например, для отправки с помощью sendmsg(2)), его необходимо заполнять нулями.

- Макрос CMSG_ALIGN() возвращает длину, учитывая необходимое выравнивание. Это постоянное выражение.

- Макрос CMSG_SPACE() возвращает количество байт, которое занимает вспомогательный элемент с полезной нагрузкой переданных данных. Это постоянное выражение.

- Макрос CMSG_DATA() возвращает указатель на часть с данными в cmsghdr.

- Макрос CMSG_LEN возвращает значение, хранящееся в поле cmsg_len структуры cmsghdr с учётом необходимого выравнивания. Он принимает значение объёма данных в качестве аргумента. Это постоянное выражение.

Чтобы создать вспомогательные данные, сначала инициализируйте элемент msg_controllen структуры msghdr, указав длину буфера управляющего сообщения. Запустите CMSG_FIRSTHDR() со структурой msghdr для получения первого управляющего сообщения и CMSG_NEXTHDR() для получения последующих. Для каждого управляющего сообщения инициализируйте cmsg_len (с помощью CMSG_LEN()) и другие поля заголовка cmsghdr, а также часть для данных (с помощью CMSG_DATA()). В результате значение поля msg_controllen структуры msghdr будет равно сумме CMSG_SPACE() для длин всех управляющих сообщений в буфере. Дополнительная информация о msghdr находится в recvmsg(2).

## СООТВЕТСТВИЕ СТАНДАРТАМ
Эта модель вспомогательных данных соответствует черновому варианту POSIX.1g, 4.4BSD-Lite, расширению IPv6 API, описанному в RFC 2292, и SUSv2. CMSG_ALIGN() — это расширение Linux.

## ЗАМЕЧАНИЯ
В целях переносимости вспомогательные данные могут быть доступны только с помощью макросов, описанных здесь. CMSG_ALIGN() — это расширение Linux, поэтому оно не должно быть использовано в переносимых программах.

В Linux CMSG_LEN(), CMSG_DATA() и CMSG_ALIGN() — это постоянные выражения (вне зависимости от переданных аргументов), то есть эти значения можно использовать для объявления размера глобальных переменных. Но это также сделает программу непереносимой на другие платформы.

## ПРИМЕР
Данный код ищет параметр IP_TTL в буфере с полученными вспомогательными данными:

```
struct msghdr msgh;
struct cmsghdr *cmsg;
int *ttlptr;
int received_ttl;
/* приём вспомогательных данных в msgh */
for (cmsg = CMSG_FIRSTHDR(&msgh); cmsg != NULL;

        cmsg = CMSG_NXTHDR(&msgh, cmsg)) {

    if (cmsg->cmsg_level == IPPROTO_IP

            && cmsg->cmsg_type == IP_TTL) {

        ttlptr = (int *) CMSG_DATA(cmsg);

        received_ttl = *ttlptr;

        break;

    }
}
if (cmsg == NULL) {

    /* Ошибка: не включён IP_TTL, мал буфер или ошибка ввода-вывода */
}
```

Данный код передаёт массив файловых дескрипторов через доменный сокет UNIX, используя SCM_RIGHTS:

```
struct msghdr msg = { 0 };
struct cmsghdr *cmsg;
int myfds[NUM_FD];  /* содержит дескрипторы файлов для передачи */
char iobuf[1];
struct iovec io = {

    .iov_base = iobuf,

    .iov_len = sizeof(iobuf)
};
union {         /* буфер вспомогательных данных, обёрнутый в union,

                   чтобы точно получить нужное выравнивание */

    char buf[CMSG_SPACE(sizeof(myfds))];

    struct cmsghdr align;
} u;
msg.msg_iov = &io;
msg.msg_iovlen = 1;
msg.msg_control = u.buf;
msg.msg_controllen = sizeof(u.buf);
cmsg = CMSG_FIRSTHDR(&msg);
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
cmsg->cmsg_len = CMSG_LEN(sizeof(int) * NUM_FD);
memcpy(CMSG_DATA(cmsg), myfds, NUM_FD * sizeof(int));
```

## СМОТРИТЕ ТАКЖЕ
recvmsg(2), sendmsg(2)

RFC 2292


confstr

title: confstr(3)

text:
# confstr(3)

## ИМЯ
confstr - получает строковые переменные конфигурации

## ОБЗОР

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

```
size_t confstr(int name, char *buf, size_t len);
```

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

confstr(): _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE

## ОПИСАНИЕ
confstr() получает значение строковой переменной, зависящей от конфигурации.

Аргумент name это название системной переменной, значение которой нужно получить. Поддерживаются следующие переменные:

_CS_GNU_LIBC_VERSION (только библиотека GNU C; начиная с glibc 2.3.2)

Строка с версией библиотеки GNU C в системе (например, «glibc 2.3.4»).

_CS_GNU_LIBPTHREAD_VERSION (только библиотека GNU C; начиная с glibc 2.3.2)

Строка, определяющая реализацию POSIX, которую предоставляет библиотека C (например, «NPTL 2.3.4» или «linuxthreads-0.10»).

_CS_PATH

Значение переменной PATH, в которой указывается где можно найти все утилиты стандарта POSIX.2.

Если buf не равно NULL и значение len не равно нулю, то confstr() копирует строку в buf, укорачивая её до len - 1 байт, если это необходимо; также добавляет байт null ('\0') в конец строки. Это может быть обнаружено сравнением возвращённого confstr() значения с len.

Если len равно нулю и buf равно NULL, то confstr() просто возвращает значение, как сказано ниже.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Если значение name — корректная переменная настройки, то confstr() возвращает количество байт (включая завершающий байт null), которое необходимо для хранения всего значения этой переменной. Это значение может быть больше len, что означает, что значение в buf обрезанное.

Если значение name — корректная переменная настройки, но эта переменная не имеет значения, то confstr() возвращает 0. Если значение name не соответствует ни одной корректной переменной настройки, то confstr() возвращает 0 и errno устанавливается в EINVAL.

## ОШИБКИ
EINVAL

Некорректное значение name.

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

Интерфейс

Атрибут

Значение

confstr()

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

MT-Safe

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

## ПРИМЕР
Следующий фрагмент кода определяет расположение всех системных утилит POSIX.2:

```
char *pathbuf;
size_t n;
n = confstr(_CS_PATH, NULL, (size_t) 0);
pathbuf = malloc(n);
if (pathbuf == NULL)

    abort();
confstr(_CS_PATH, pathbuf, n);
```

## СМОТРИТЕ ТАКЖЕ
getconf(1), sh(1), exec(3), fpathconf(3), pathconf(3), sysconf(3), system(3)


conj

title: conj(3)

text:
# conj(3)

## ИМЯ
conj, conjf, conjl - вычисление комплексно сопряженного числа

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

double complex conj(double complex z);

float complex conjf(float complex z);

long double complex conjl(long double complex z);

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

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

Формула вычисления:

```
    cabs(z) = csqrt(z * conj(z))
```

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

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

Интерфейс

Атрибут

Значение

conj(), conjf(), conjl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), csqrt(3), complex(7)


copysign

title: copysign(3)

summary: копирует знак числа

text:
# copysign(3)

## ИМЯ
copysign, copysignf, copysignl - копирует знак числа

## ОБЗОР

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

```
double copysign(double x, double y);
float copysignf(float x, float y);
long double copysignl(long double x, long double y);
```

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

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

copysign(), copysignf(), copysignl():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

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

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

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

Например, copysign(42.0, -1.0) и copysign(-42.0, -1.0) вернут -42.0.

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

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

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

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

Интерфейс

Атрибут

Значение

copysign(), copysignf(), copysignl()

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

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
C99, POSIX.1-2001, POSIX.1-2008. Эта функция определена в IEC 559 (и в приложении с рекомендуемыми функциями IEEE 754/IEEE 854).

## ЗАМЕЧАНИЯ
На архитектурах, у которых форматы чисел с плавающей запятой не совместимы с IEEE 754, эти функции могут считать отрицательный ноль как положительный.

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


cos

title: cos(3)

summary: функция вычисления косинуса

text:
# cos(3)

## ИМЯ
cos, cosf, cosl - функция вычисления косинуса

## ОБЗОР

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

```
double cos(double x);
float cosf(float x);
long double cosl(long double x);
```

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

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

cosf(), cosl():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

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

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

## ОПИСАНИЕ
Эти функции возвращают косинус от x, где x указан в радианах.

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

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

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

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

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

Ошибка области: x стремится к бесконечности

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

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

Интерфейс

Атрибут

Значение

cos(), cosf(), cosl()

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

MT-Safe

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

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

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

## СМОТРИТЕ ТАКЖЕ
acos(3), asin(3), atan(3), atan2(3), ccos(3), sin(3), sincos(3), tan(3)


cosh

title: cosh(3)

text:
# cosh(3)

## ИМЯ
cosh, coshf, coshl - функция вычисления гиперболического косинуса

## ОБЗОР

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

```
double cosh(double x);
float coshf(float x);
long double coshl(long double x);
```

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

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

coshf(), coshl():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

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

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

## ОПИСАНИЕ
Эти функции возвращают гиперболический косинус от x, как это математически определено:

```
    cosh(x) = (exp(x) + exp(-x)) / 2
```

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

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

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

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

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

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

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

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

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

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

Интерфейс

Атрибут

Значение

cosh(), coshf(), coshl()

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

MT-Safe

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

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

## ДЕФЕКТЫ
В glibc 2.3.4 и более ранних версиях исключение переполнения плавающей точки (FE_OVERFLOW) при переполнении не возникает.

## СМОТРИТЕ ТАКЖЕ
acosh(3), asinh(3), atanh(3), ccos(3), sinh(3), tanh(3)


cpow

title: cpow(3)

text:
# cpow(3)

## ИМЯ
cpow, cpowf, cpowl - функция возведения комплексного числа в степень

## ОБЗОР

```
#include <complex.h>
```

```
double complex cpow(double complex x, complex double z);
float complex cpowf(float complex x, complex float z);
long double complex cpowl(long double complex x,
                          complex long double z);
```

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

## ОПИСАНИЕ
Эти функции вычисляют x, возведённое в степень z (с обрезанием ветви для x вдоль отрицательной действительной оси).

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

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

Интерфейс

Атрибут

Значение

cpow(), cpowf(), cpowl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), pow(3), complex(7)


cproj

title: cproj(3)

summary: проекция на римановскую сферу

text:
# cproj(3)

## ИМЯ
cproj, cprojf, cprojl - проекция на римановскую сферу

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

double complex cproj(double complex z);

float complex cprojf(float complex z);

long double complex cprojl(long double complex z);

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

## ОПИСАНИЕ
Эти функции проецируют точку плоскости на поверхность римановской сферы, одноточечную компактификацию комплексной плоскости. Каждая конечная точка z проецируется в саму z. Все комплексные бесконечные значения проецируются в одно бесконечное значение, а именно в положительную бесконечность действительной оси.

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

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

Интерфейс

Атрибут

Значение

cproj(), cprojf(), cprojl()

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

MT-Safe

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

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), complex(7)


creal

title: creal(3)

text:
# creal(3)

## ИМЯ
creal, crealf, creall - получение действительной части комплексного числа

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

double creal(double complex z);

float crealf(float complex z);

long double creall(long double complex z);

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

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

Формула вычисления:

```
    z = creal(z) + I * cimag(z)
```

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

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

Интерфейс

Атрибут

Значение

creal(), crealf(), creall()

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

MT-Safe

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

## ЗАМЕЧАНИЯ
gcc также поддерживает __real__. Это расширение GNU.

## СМОТРИТЕ ТАКЖЕ
cabs(3), cimag(3), complex(7)


crypt

title: crypt(3)

summary: шифрует пароль и данные

text:
# crypt(3)

## ИМЯ
crypt, crypt_r - шифрует пароль и данные

## ОБЗОР

```
#define _XOPEN_SOURCE       /* См. feature_test_macros(7) */
#include <unistd.h>
```

```
char *crypt(const char *key, const char *salt);
#define _GNU_SOURCE         /* смотрите feature_test_macros(7) */
#include <crypt.h>
```

```
char *crypt_r(const char *key, const char *salt,
              struct crypt_data *data);
```

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

## ОПИСАНИЕ
crypt() — функция шифрования пароля. Она основана на алгоритме стандарта шифрования данных (Data Encryption Standard) с различными расширениями, нацеленными (помимо прочего) на усложнение задачи поиска ключа при помощи специального оборудования.

key — задаваемый пользователем пароль.

salt (соль) — двухсимвольная строка, выбираемая из набора [a-zA-Z0-9./]. Эта строка используется для направления алгоритма по одному из 4096-и путей.

Если взять младшие 7 битов каждого из первых 8 символов key, то получается 56-битный ключ. Этот ключ используется для многократного шифрования константной строки (обычно строки, состоящей из символов «0»). Возвращаемое значение — указатель на зашифрованный пароль, серия из 13-и печатных ASCII-символов (первые два символа содержат salt). Возвращаемое значение указывает на статические данные, которые перезаписываются при каждом вызове.

Предупреждение: количество ключей равно 2**56 т. е. существует 7.2e16 возможных вариантов. Полный перебор этого множестве возможен с помощью большого количества параллельных компьютеров. Программное обеспечение, такое, как crack(1), способно отыскать часть ключей из этого множества, обычно используемых людьми для создания пароля. Поэтому в качестве пароля не стоит, как минимум, использовать простые слова и имена. Рекомендуется использовать программу passwd(1), которая проверяет сложность пароля уже на стадии ввода.

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

Функция crypt_r() является реентерабельной версией crypt(). Для учёта и хранения результата в ней используется структура, на которую указывает data. Перед первым вызовом crypt_r() требуется выделить место под структуру и присвоить data->initialized значение 0.

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

## ОШИБКИ
EINVAL

Значение salt имеет неверный формат.

ENOSYS

Функция crypt() не реализована, возможно, из-за запретов США на экспорт алгоритмов шифрования.

EPERM

Значение /proc/sys/crypto/fips_enabled не равно нулю, но делается попытка использовать нестойкий тип шифрования, такой как DES.

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

Интерфейс

Атрибут

Значение

crypt()

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

MT-Unsafe race:crypt

crypt_r()

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

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
crypt(): POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD. Функция crypt_r() является расширением GNU.

## ЗАМЕЧАНИЯ

### Доступность в glibc
Функции crypt(), encrypt(3) и setkey(3) являются частью POSIX.1-2008 XSI Options Group for Encryption и необязательны. Если интерфейсы недоступны, то символическая константа _XOPEN_CRYPT или не определена, или имеет значение -1 и доступность можно проверить во время выполнения с помощью sysconf(3). Такое может случиться, если дистрибутив переключился с glibc crypt на libxcrypt. При перекомпиляции приложений в таких дистрибутивах программист должен проверять доступность _XOPEN_CRYPT и включать <crypt.h> с прототипами функций; в противном случае использовать libxcrypt как ABI-совместимую замену.

### Свойства в glibc
Версия этой функции, реализованная в glibc, содержит дополнительные алгоритмы шифрования.

Если salt является строкой символов, начинающейся с «$id$», за которой следует строка, оканчивающаяся «$», то результатом будет:

$id$salt$encrypted

В id указывается метод шифрования, используемый вместо DES; он определяет как понимать оставшуюся часть строки пароля. Поддерживаются следующие значения id:

ID | Метод

1 | MD5

2a | Blowfish (нет в основной ветви glibc; добавлен в

| некоторых дистрибутивах Linux)

5 | SHA-256 (начиная с glibc 2.7)

6 | SHA-512 (начиная с glibc 2.7)

Таким образом, $5$salt$encrypted и $6$salt$encrypted содержат пароль, зашифрованный функциями на основе SHA-256 и SHA-512, соответственно.

Значение «salt» представляет собой строку длиной до 16 символов, следующую после «$id$» в соли. Часть строки пароля «encrypted» — действительно вычисленный пароль. Размер этой строки постоянен:

MD5 | 22 символа

SHA-256 | 43 символа

SHA-512 | 86 символов

Символы в «salt» и «encrypted» входят в диапазон [a-zA-Z0-9./]. В реализациях MD5 и SHA учитывается всё значение key (а не только первые 8 байт как в DES).

Начиная с glibc 2.7, реализации SHA-256 и SHA-512 поддерживают задаваемое пользователем количество циклов хеширования, по умолчанию 5000. Если символы "$id$" в соли указываются после "rounds=xxx$", где xxx целое, то результат имеет вид

$id$rounds=yyy$salt$encrypted

где yyy — используемое количество циклов хеширования. Количество циклов равно 1000, если значение xxx меньше 1000, 999999999, если xxx больше 999999999, и равно xxx в остальных случаях.

## СМОТРИТЕ ТАКЖЕ
login(1), passwd(1), encrypt(3), getpass(3), passwd(5)


csin

title: csin(3)

summary: вычисляет комплексный синус

text:
# csin(3)

## ИМЯ
csin, csinf, csinl - вычисляет комплексный синус

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

double complex csin(double complex z);

float complex csinf(float complex z);

long double complex csinl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют комплексный синус z.

Функция комплексного синуса определяется как:

```
    csin(z) = (exp(i * z) - exp(-i * z)) / (2 * i)
```

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

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

Интерфейс

Атрибут

Значение

csin(), csinf(), csinl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), casin(3), ccos(3), ctan(3), complex(7)


csinh

title: csinh(3)

text:
# csinh(3)

## ИМЯ
csinh, csinhf, csinhl - вычисление гиперболического синуса комплексного числа

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

double complex csinh(double complex z);

float complex csinhf(float complex z);

long double complex csinhl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют комплексный гиперболический синус z.

Функция вычисления гиперболического синуса комплексного числа определена формулой:

```
    csinh(z) = (exp(z)-exp(-z))/2
```

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

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

Интерфейс

Атрибут

Значение

csinh(), csinhf(), csinhl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), casinh(3), ccosh(3), ctanh(3), complex(7)


csqrt

title: csqrt(3)

text:
# csqrt(3)

## ИМЯ
csqrt, csqrtf, csqrtl - вычисление квадратного корня комплексного числа

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

double complex csqrt(double complex z);

float complex csqrtf(float complex z);

long double complex csqrtl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют квадратный корень комплексного числа z, лежащей на положительной половине абсциссы (то есть csqrt(-1+eps*I) будет стремиться к I, а csqrt(-1-eps*I) будет стремиться к -I, если eps является маленьким положительным вещественным числом).

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

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

Интерфейс

Атрибут

Значение

csqrt(), csqrtf(), csqrtl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), cexp(3), complex(7)


ctan

title: ctan(3)

text:
# ctan(3)

## ИМЯ
ctan, ctanf, ctanl - функция вычисления тангенса комплексного числа

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

double complex ctan(double complex z);

float complex ctanf(float complex z);

long double complex ctanl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют комплексный тангенс z.

Функция тангенса комплексного числа определяется следующей формулой:

```
    ctan(z) = csin(z) / ccos(z)
```

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

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

Интерфейс

Атрибут

Значение

ctan(), ctanf(), ctanl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), catan(3), ccos(3), csin(3), complex(7)


ctanh

title: ctanh(3)

text:
# ctanh(3)

## ИМЯ
ctanh, ctanhf, ctanhl - вычисление гиперболического тангенса комплексного числа

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

double complex ctanh(double complex z);

float complex ctanhf(float complex z);

long double complex ctanhl(long double complex z);

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

## ОПИСАНИЕ
Эти функции вычисляют комплексный гиперболический тангенс z.

Функция гиперболического тангенса комплексного числа математически определена как:

```
    ctanh(z) = csinh(z) / ccosh(z)
```

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

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

Интерфейс

Атрибут

Значение

ctanh(), ctanhf(), ctanhl()

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

MT-Safe

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

## СМОТРИТЕ ТАКЖЕ
cabs(3), catanh(3), ccosh(3), csinh(3), complex(7)


ctermid

title: ctermid(3)

summary: возвращает имя управляющего терминала

text:
# ctermid(3)

## ИМЯ
ctermid - возвращает имя управляющего терминала

## ОБЗОР

```
#include <stdio.h>
```

```
char *ctermid(char *s);
```

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

ctermid(): _POSIX_C_SOURCE

## ОПИСАНИЕ
Функция ctermid() возвращает строку с полным путём текущего управляющего терминала процесса. Если s равно NULL, то используется статический буфер, в противном случае s указывает на буфер для хранения пути терминала. Символической константой L_ctermid определяется максимальное количество символов в возвращаемом пути.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Указатель на путь.

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

Интерфейс

Атрибут

Значение

ctermid()

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

MT-Safe

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

## ДЕФЕКТЫ
Возвращаемый путь может быть не уникальным для идентификации управляющего терминала; например, это может быть /dev/tty.

Не выполняется проверка, что программа может открыть управляющий терминал.

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


ctime

title: ctime(3)

text:
# ctime(3)

## ИМЯ
asctime, ctime, gmtime, localtime, mktime, asctime_r, ctime_r, gmtime_r, localtime_r - преобразует дату и время в раздельном представлении или ASCII

## ОБЗОР

```
#include <time.h>
```

```
char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);
```

```
char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);
```

```
struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);
```

```
struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);
```

```
time_t mktime(struct tm *tm);
```

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

asctime_r(), ctime_r(), gmtime_r(), localtime_r():

_POSIX_C_SOURCE

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

## ОПИСАНИЕ
Функции ctime(), gmtime() и localtime() в качестве аргумента используют тип данных time_t, представляющий собой календарное время. При его интерпретации как абсолютного времени, оно представляет количество секунд, прошедших с начала эпохи — 00:00:00 1 января 1970 +0000 (UTC).

Функции asctime() и mktime() используют в качестве аргумента время, которое разделено на компоненты: год, месяц, день и т. п.

Время в виде компонент хранится в структуре tm, которая определена в файле <time.h> следующим образом:

```
struct tm {

    int tm_sec;    /* секунды (0-60) */

    int tm_min;    /* минуты (0-59) */

    int tm_hour;   /* часы (0-23) */

    int tm_mday;   /* день в месяце (1-31) */

    int tm_mon;    /* месяц (0-11) */

    int tm_year;   /* год - 1900 */

    int tm_wday;   /* день недели (0-6, воскресенье = 0) */

    int tm_yday;   /* день в году (0-365, 1 январь = 0) */

    int tm_isdst;  /* летнее время */
};
```

Члены структуры tm:

tm_sec

Количество секунд до целой минуты, обычно в диапазоне от 0 до 59; но для того, чтобы установить високосную секунду, используются числа до 60.

tm_min

Количество минут до целого часа, от 0 до 59.

tm_hour

Количество часов прошедших после полуночи, от 0 до 23.

tm_mday

День месяца, от 1 до 31.

tm_mon

Количество месяцев, прошедших с января, от 0 до 11.

tm_year

Количество лет, прошедших с 1900 года.

tm_wday

Количество дней, прошедших с воскресенья, от 0 до 6.

tm_yday

Количество дней, прошедших с 1 января, от 0 до 365.

tm_isdst

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

Вызов ctime(t) эквивалентен asctime(localtime(t)). Он преобразует календарное время t в строку (с null в конце) вида

```
"Wed Jun 30 21:49:08 1993\n"
```

Аббревиатуры дней недели: «Sun», «Mon», «Tue», «Wed», «Thu», «Fri» и «Sat». Аббревиатуры месяцев: «Jan», «Feb», «Mar», «Apr», «May», «Jun», «Jul», «Aug», «Sep», «Oct», «Nov» и «Dec». Возвращаемое значение указывает на статически размещённую строку, которая может быть перезаписана последующими вызовами любых функций даты и времени. Функция также устанавливает в внешних переменных tzname, timezone и daylight (смотрите tzset(3)) текущий часовой пояс. Реентерабельная версия ctime_r() делает то же самое, но заносит строку в буфер, предоставляемый пользователем. Длина буфера должна быть не менее 26 байт. Ей не нужно устанавливать tzname, timezone и daylight.

Функция gmtime() преобразует календарное время timep в компонентное представление, выраженное в виде всеобщего скоординированного времени (UTC). Она может вернуть значение NULL, если год не может быть описан типом integer. Возвращаемое значение указывает на статически выделенную структуру, содержимое которой может быть перезаписано последующими вызовами любых функций, работающих с датой и временем. Функция gmtime_r() делает то же самое, но помещает данные в структуру, предоставленную пользователем.

Функция localtime() преобразует календарное время timep в компонентное представление, выраженное относительно часового пояса, заданного пользователем. Функция работает так, как-будто она вызывает tzset(3), и устанавливает внешние переменные: tzname в значение текущего часового пояса, timezone в значение разницы в секундах между всеобщим скоординированным временем (UTC) и локальным стандартом времени, и daylight в ненулевое значение, если действуют стандартные правила летнего времени. Возвращаемое значение указывает на статически выделенную структуру, содержимое которой может быть перезаписано последующими вызовами любых функций, работающих с датой и временем. Функция localtime_r() делает то же самое, но помещает данные в структуру, предоставленную пользователем. Она не нуждается в установке tzname, timezone и daylight.

Функция asctime() преобразует компонентное значение времени tm в строку (с null в конце) того же формата, что и функция ctime(). Возвращаемое значение указывает на статическую строку, которая может быть перезаписана последовательностью вызовов любых функций даты и времени. Функция asctime_r() делает то же самое, но заносит строку в буфер, предоставленный пользователем. Длина буфера должна быть не менее 26 байт.

Функция mktime() преобразует компонентное структурированное значение локального времени в календарное представление. Функция игнорирует содержимое полей структуры tm_wday и tm_yday, заданные вызывающим. Значение, указанное в поле tm_isdst, информирует mktime() о действии летнего время (DST) в времени в структуре tm: положительно значение показывает, что действует; 0 означает, что не действует и отрицательное значение означает, что mktime() должна попытаться определить самостоятельно, действует ли летнее время (используя информацию о часовом поясе и базы данных системы).

Функция mktime() изменяет поля структуры tm следующим образом: в tm_wday и tm_yday записываются значения, определённые на основе содержимого других полей; если члены структуры вне своих допустимых интервалов, то они будут нормализованы (так, например, 40 октября превращается в 9 ноября); в tm_isdst записывается положительное значение или 0, соответственно, для указания действия летнего времени (независимо от его начального значения). Вызов mktime() также присваивает внешней переменной tzname значение текущего часового пояса.

Если компонентное значение времени не может быть представлено как календарное (число секунд с начала эпохи), то mktime() возвращает значение (time_t) -1 и не изменяет значения полей структуры компонентного значения времени.

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

При успешном выполнении функции gmtime_r() и localtime_r() возвращают адрес структуры, на которую указывает result.

При успешном выполнении функции asctime() и ctime() возвращают указатель на строку.

При успешном выполнении функции asctime_r() и ctime_r() возвращают указатель на строку, на которую указывает buf.

При успешном выполнении функция mktime() возвращает календарное время (секунды с начала эпохи), выраженное значением с типом time_t.

При ошибке функция mktime() возвращает значение (time_t) -1. Остальные функции при ошибке возвращают NULL. При ошибке в errno записывается причина ошибки.

## ОШИБКИ
EOVERFLOW

Результат не может быть представлен.

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

Интерфейс

Атрибут

Значение

asctime()

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

MT-Unsafe race:asctime locale

asctime_r()

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

MT-Safe locale

ctime()

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

MT-Unsafe race:tmbuf race:asctime env locale

ctime_r(), gmtime_r(), localtime_r(), mktime()

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

MT-Safe env locale

gmtime(), localtime()

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

MT-Unsafe race:tmbuf env locale

## СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001. В C89 и C99 определены функции asctime(), ctime(), gmtime(), localtime() и mktime(). В POSIX.1-2008 функции asctime(), asctime_r(), ctime() и ctime_r() помечены как устаревшие. Вместо них рекомендуется использовать strftime(3).

## ЗАМЕЧАНИЯ
Функции asctime(), ctime(), gmtime() и localtime() возвращают указатель на статические данные и небезопасны при использовании в нитях. Безопасными являются их аналоги asctime_r(), ctime_r(), gmtime_r() и localtime_r(), введённые в SUSv2.

В POSIX.1-2001 сказано: «Функции asctime(), ctime(), gmtime() и localtime() должны возвращать значения в одном из двух статических объектов: структуре компонентного значения времени и массиве типа char. Выполнение любой функции может перезаписать данные, возвращённые ранее любой другой функцией в любом из этих объектов.» Это может происходить в реализации glibc.

Во многих реализациях, включая glibc, 0 в tm_mday означает последний день предыдущего месяца.

Структура struct tm версии glibc имеет дополнительные поля

```
const char *tm_zone;      /* аббревиатура часового пояса */
```

определяемые в случае, если макрос _BSD_SOURCE был определён до включения <time.h>. Это расширение BSD, существует в 4.3BSD-Reno.

Согласно POSIX.1-2004, для localtime() требуется повторить поведение как если бы была вызвана tzset(3), хотя для localtime_r() такого требования не выдвигается. В целях переносимости в коде нужно вызывать tzset(3) перед localtime_r().

## СМОТРИТЕ ТАКЖЕ
date(1), gettimeofday(2), time(2), utime(2), clock(3), difftime(3), strftime(3), strptime(3), timegm(3), tzset(3), time(7)


daemon

title: daemon(3)

summary: выполнение в фоновом режиме

text:
# daemon(3)

## ИМЯ
daemon - выполнение в фоновом режиме

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

int daemon(int nochdir, int noclose);

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

daemon():

```
    начиная с glibc 2.21:

        _DEFAULT_SOURCE

    в glibc 2.19 и 2.20:

        _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

    до glibc 2.19, включительно:

        _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
```

## ОПИСАНИЕ
Функция daemon() необходима для того, чтобы отключить программу от управляющего терминала и запустить её в фоновом режиме подобно тому, как выполняются системные службы.

Если аргумент nochdir равен нулю, то daemon() изменяет текущий рабочий каталог процесса на корневой («/»); в противном случае текущий рабочий каталог не изменяется.

Если аргумент noclose равен нулю, то daemon() перенаправляет стандартный поток ввода, вывода и ошибок в /dev/null; в противном случае данные файловые дескрипторы не изменяется.

## ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Эта функция порождает новый процесс и, если fork(2) завершается без ошибок, родительский процесс вызывает _exit(2), чтобы дальнейшие ошибки воспринимались только дочерним процессом. В случае успешного выполнения daemon() возвращается ноль. Если возникла ошибка, то daemon() возвращает -1 и присваивает глобальной переменной errno одно из значений, указанных для fork(2) и setsid(2).

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

Интерфейс

Атрибут

Значение

daemon()

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

MT-Safe

## СООТВЕТСТВИЕ СТАНДАРТАМ
Отсутствует в POSIX.1. Подобная функция есть в BSD. Впервые функция daemon() появилась в 4.4BSD.

## ЗАМЕЧАНИЯ
Реализация в glibc может также возвращать -1 в случаях, когда /dev/null существует, но не является файлом символьного устройства с ожидаемыми основным и вспомогательным номерами. В этом случае нет необходимости устанавливать errno.

## ДЕФЕКТЫ
Для библиотеки GNU C реализация этой функции была взята из BSD, и в ней не применяется техника двойного fork (т. е., fork(2), setsid(2), fork(2)), поэтому необходимо проверить, что полученный процесс службы не является лидером сеанса. Вместо этого полученная служба является лидером сеанса. В системах, следующих семантике System V (например, Linux), это означает, что если служба открывает терминал, которой пока не является управляющим для другого сеанса, то этот терминал непреднамеренно станет управляющим терминалом для службы.

## СМОТРИТЕ ТАКЖЕ
fork(2), setsid(2), daemon(7), logrotate(8)