|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Andriy Gapon 2:5020/400 02 Feb 2006 20:50:46 To : Dmitry Pryanishnikov Subject : Re: Облом ls --------------------------------------------------------------------------------
on 02/02/2006 09:25 Dmitry Pryanishnikov said the following:
> В UNIX-подобных системах (в отличие, скажем, от той же OpenVMS)
> предобработкой командной строки занимается шелл, и это его работа
> (а не утилиты) - вместо '*' подставить список файлов в текущей директории.
> Hедостаток такого подхода очевиден: если общая длина развернутого шеллом
> списка превышает некое максимальное значение (во FreeBSD его можно
> получить командой "sysctl kern.argmax"), шеллу просто не удается "пропихнуть"
> список аргументов утилите (виртуальная память, выделяемая для нужд ядра, все
> же не резиновая). Если же мы просто запускаем ls, то сама наша утилита,
> обнаружив пустой список аргументов, "добывает" список файлов, читая текущую
> директорию. Здесь уже такого жесткого ограничения по размеру директории нет,
> тем более что и сразу зачитывать весь список в память необходимости нет (в
> отличие от команды "ls *").
хочу добавить сразу, что в балете может принимать участие и
среда/переменные окружения (environment), детали здесь:
http://www.in-ulm.de/~mascheck/various/argmax/
Вот что пишет execve(2) на FreeBSD:
[E2BIG] The number of bytes in the new process' argument list
is larger than the system-imposed limit. This limit
is specified by the sysctl(3) MIB variable
KERN_ARGMAX.
А вот что пишет POSIX:
http://www.opengroup.org/onlinepubs/009695399/functions/execve.html
[E2BIG] The number of bytes used by the new process image's argument
list and environment list is greater than the system-imposed limit of
{ARG_MAX} bytes.
--
Andriy Gapon
--- ifmail v.2.15dev5.3
* Origin: Anonymous Partisans Online (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/98737ca3b062.html, оценка из 5, голосов 10
|