On Mon, Dec 24, 2007 at 01:42:54PM +0300, Artem Chuprina wrote: > Alexey Pechnikov -> debian-russian@lists.debian.org @ Mon, 24 Dec 2007 > 12:19:52 +0300: > AP> Из шелла писал _одну_ строку - rm /test_1000000/*. И > AP> аргумент "/test_1000000/*" всего один, откуда возьмется "Argument list > too > AP> long?" > > Из мана на используемый шелл, а что? > > Не, судя по отсутствию "Argument list too long" этот rm - builtin, и > шелл, как следствие, скорее всего, busybox... И именно в его исходники > и надо смотреть.
Во-первых, ограничение размера аргументов -- это ограничение execve(), статус возврата E2BIG. В линуксе традиционно был лимит в 128KB. Шелл сначала раскручивает *, затем делает fork() и попытку execve("/bin/rm"). Во-вторых, я сильно сомневаюсь, что есть нормальный (не-busybox'овый) шелл, у которого "rm" -- встроенная команда. Потому что исторически у rm есть немало опций, разбирать которые шеллом замучаешься... Да и нет, собственно, причин делать rm встроенным. А тормоза у Печникова, наверное, из-за того, что шелл * пакует в монолитную строку через realloc(), а тикл пользуется чанковыми строками. Но и это не предел оптимизации. Думаю, perl с unlink() в реверсном цикле уделает этот тикль как бог черепаху... :-) -- Eugene Berdnikov -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]