BRK(2) BRK(2) НАЗВАНИЕ brk, sbrk - изменение размера сегмента данных СИНТАКСИС |int brk (endds) |char *endds; | |char *sbrk (incr) |int incr; ОПИСАНИЕ Системные вызовы brk и sbrk используются для динамичес- кого изменения количества оперативной памяти, выделен- ной под сегмент данных процесса, делающего вызов [см. exec(2)]. Это изменение достигается передвижением верх- ней границы сегмента данных и выделением соответствую- щего количества памяти. Далее под верхней границей по- нимается адрес сразу за концом сегмента данных. Увели- чение этого адреса соответствует увеличению количества памяти, выделенной процессу. Вновь выделенная память заполнена нулями. Однако, если некоторая область памяти выделяется процессу повторно, ее содержимое будет неоп- ределенным. Системный вызов brk устанавливает верхнюю границу рав- ной endds и соответственно изменяет количество памяти, выделенной процессу. Системный вызов sbrk передвигает верхнюю границу на incr байт и соответственно изменяет количество памяти, выделенной процессу. Значение incr может быть отрица- тельным, в этом случае количество выделенной памяти уменьшается. Верхняя граница сегмента данных не передвигается и сис- темные вызовы brk и sbrk завершаются неудачей, если вы полнено хотя бы одно из следующих условий: [ENOMEM] Запрашиваемое действие привело бы к наруше нию системного ограничения на размер данно го процесса [см. ulimit(2)]. [EAGAIN] Общее количество системной памяти, предос- тавленной для физического ввода/вывода, временно оказалось недостаточным. Это может случиться, даже если системное ограничение на размер процесса не нарушается. СМ. ТАКЖЕ exec(2), ulimit(2), end(3C). ДИАГНОСТИКА При успешном завершении brk возвращает 0, а sbrk - ста- рый адрес конца программы; в случае ошибки возвращается -1, а переменной errno присваивается код ошибки.