From sitkarev на komitex.ru Sun Feb 6 11:00:41 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 06 Feb 2011 10:00:41 +0300 Subject: [P&AM Lab] =?utf-8?b?0KTQtdCy0YDQsNC70YwgMjAxMSwg0LLRgtC+0YDQvtC1?= =?utf-8?b?INC/0L7Qu9GD0LPQvtC00LjQtQ==?= Message-ID: <4D4E4719.2050501@komitex.ru> Всех приветствую. Праздники, сессия и каникулы подошли к концу. Я предлагаю продолжить наши занятия со следующей недели. Руслан Александрович будет отсутствовать какое-то время, думаю что это не помешает нам начать разборки с маршрутизацией. Расписание занятий пока оставляем как раньше, заниматься будем в пятницу и субботу. Если есть предложения -- пишите, будем обсуждать. По заданию, которое начинали делать и было ТЗ пока никто ничего не присылал. Надеюсь что нашли время разбираться и сидеть, ковыряться с исходниками. Ждём от вас творческой инициативы, участники списка рассылки всегда готовы помочь и ответить на вопросы. Появилась новая литература, в частности перевод на русский язык классического руководства по ОС UNIX, "UNIX (R) Programming Environment", изданного в 1984-м году за авторством Б.Кернигана. Пора браться за работу. -- Г.А. From ilyaart90 на rambler.ru Wed Feb 9 18:15:59 2011 From: ilyaart90 на rambler.ru (=?windows-1251?B?yOv8/yDA8PLl5eI=?=) Date: Wed, 09 Feb 2011 17:15:59 +0300 Subject: [P&AM Lab] =?windows-1251?b?1OXi8ODr/CAyMDExLCDi8u7w7uUg7+7r8+Pu?= =?windows-1251?b?5Ojl?= References: <4D4E4719.2050501@komitex.ru> Message-ID: <311975247.1297260959.94028552.14446@mcgi-wr-7.rambler.ru> Григорий Александрович, у нас неприятность с расписанием! в пятницу мы (я, Боря, Игорь и Коля) учимся с 15:30 до 20:20, но по субботам у нас как и прежде ничего нету. Понедельник до 18:40 Вторник с 15:30 до 18:40 Среда до 15:30 четверг по числителью до 17:00 по знаменателю до 15:30 пятница по чисдителю с 13:50 до 20:20 по знаменателю с 15:30 до 18:40 Нужно что-то делать (другое время искать) . From sitkarev на komitex.ru Thu Feb 10 00:27:06 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Wed, 09 Feb 2011 23:27:06 +0300 Subject: [P&AM Lab] =?utf-8?b?0KTQtdCy0YDQsNC70YwgMjAxMSwg0LLRgtC+0YDQvtC1?= =?utf-8?b?INC/0L7Qu9GD0LPQvtC00LjQtQ==?= In-Reply-To: <311975247.1297260959.94028552.14446@mcgi-wr-7.rambler.ru> References: <4D4E4719.2050501@komitex.ru> <311975247.1297260959.94028552.14446@mcgi-wr-7.rambler.ru> Message-ID: <4D52F89A.8020103@komitex.ru> Прямо как назло расписание составляли. Теоретически, среда подходит. Сделаем так -- я попробую узнать что там с расписанием на 425-ю в этот день. Мы же как сироты, своего угла не имеем, ходим побираемся, где пустят. Субботу тогда оставляем так как есть. -- Г.А. 09.02.2011 17:15, Илья Артеев пишет: > Григорий Александрович, у нас неприятность с расписанием! > в пятницу мы (я, Боря, Игорь и Коля) учимся с 15:30 до 20:20, но > по субботам у нас как и прежде ничего нету. > Понедельник до 18:40 > Вторник с 15:30 до 18:40 > Среда до 15:30 > четверг по числителью до 17:00 по знаменателю до 15:30 > пятница по чисдителю с 13:50 до 20:20 по знаменателю с 15:30 до 18:40 > > Нужно что-то делать (другое время искать) . From Lonely.RuyK на mail.ru Sat Feb 12 20:54:16 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Sat, 12 Feb 2011 19:54:16 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= Message-ID: <201102121954.16875.Lonely.RuyK@mail.ru> Вот чего в результате получилось. Посоветуйте пожалуйста чего изменить можно. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: cat_lnly.c Type: text/x-csrc Size: 3058 bytes Desc: отсутствует URL: From ilyaart90 на rambler.ru Sat Feb 12 22:09:44 2011 From: ilyaart90 на rambler.ru (=?windows-1251?B?yOv8/yDA8PLl5eI=?=) Date: Sat, 12 Feb 2011 21:09:44 +0300 Subject: [P&AM Lab] =?windows-1251?b?1OXi8ODr/CAyMDExLCDi8u7w7uUg7+7r8+Pu?= =?windows-1251?b?5Ojl?= References: <4D4E4719.2050501@komitex.ru> <311975247.1297260959.94028552.14446@mcgi-wr-7.rambler.ru> <4D52F89A.8020103@komitex.ru> Message-ID: <64094796.1297534184.127758200.85713@mcgi-wr-3.rambler.ru> Григорий Александрович, что-то не получается найти книжку Unix Programming Environment. на английском есть, на руском не нашел From sitkarev на komitex.ru Sat Feb 12 23:35:22 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sat, 12 Feb 2011 22:35:22 +0300 Subject: [P&AM Lab] =?utf-8?b?0KTQtdCy0YDQsNC70YwgMjAxMSwg0LLRgtC+0YDQvtC1?= =?utf-8?b?INC/0L7Qu9GD0LPQvtC00LjQtQ==?= In-Reply-To: <64094796.1297534184.127758200.85713@mcgi-wr-3.rambler.ru> References: <4D4E4719.2050501@komitex.ru> <311975247.1297260959.94028552.14446@mcgi-wr-7.rambler.ru> <4D52F89A.8020103@komitex.ru> <64094796.1297534184.127758200.85713@mcgi-wr-3.rambler.ru> Message-ID: <4D56E0FA.2060801@komitex.ru> Да, они перевели название вот так "Программное окружение UNIX". Поищите по этой строке, найдёте то что вам нужно. -- Г.А. 12.02.2011 21:09, Илья Артеев пишет: > Григорий Александрович, что-то не получается найти книжку Unix > Programming Environment. > > на английском есть, на руском не нашел From sitkarev на komitex.ru Sat Feb 12 23:36:39 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sat, 12 Feb 2011 22:36:39 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <201102121954.16875.Lonely.RuyK@mail.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> Message-ID: <4D56E147.3070909@komitex.ru> Боря, я пробежался глазами. Есть по коду предложения и замечания. Позже отпишусь подробнее. Сегодня уже сил нет. -- Г.А. 12.02.2011 19:54, LonelyRuyK пишет: > Вот чего в результате получилось. Посоветуйте пожалуйста чего изменить можно. From nateford на inbox.ru Sun Feb 13 00:48:26 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sat, 12 Feb 2011 23:48:26 +0300 Subject: [P&AM Lab] =?koi8-r?b?7sXJ2s3FztHA3cnK09Eg19nXz8Q=?= Message-ID: #include #include #define MAX_LENGTH 1024 int main() { int len, i, tag, *appleseed; char word[MAX_LENGTH]; unsigned short swarm[3]; printf("Length of the word: "); scanf("%i", &len); swarm[0] = 1; swarm[1] = 2; swarm[2] = 4; if (len > MAX_LENGTH) { printf("You entered too big length.\n"); exit(1); } seed48(swarm); for (i = 0; i < len; i++) { tag = lrand48() % 3; switch (tag) { case 0: word[i] = 'a'; break; case 1: word[i] = 'b'; break; case 2: word[i] = 'c'; break; default: printf("Tag has bad value."); exit(1); } } for (i = 0; i < len; i++) { printf("%c", word[i]); } printf(" %i\n", tag); return 0; } чего-то не хватает. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From sitkarev на komitex.ru Sun Feb 13 00:55:42 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sat, 12 Feb 2011 23:55:42 +0300 Subject: [P&AM Lab] =?utf-8?b?0J3QtdC40LfQvNC10L3Rj9GO0YnQuNC50YHRjyDQstGL?= =?utf-8?b?0LLQvtC0?= In-Reply-To: References: Message-ID: <4D56F3CE.2000003@komitex.ru> Для начала, убери остаток от деления, когда ты получаешь случайное число в lrand48(), и просто выводи случайные числа в цикле и посмотри что там будет. А там будет. -- Г.А. > чего-то не хватает. > > > > > > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab From nateford на inbox.ru Sun Feb 13 12:33:37 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 11:33:37 +0300 Subject: [P&AM Lab] =?koi8-r?b?zcHL08nNwczYzsHRIMTMyc7BIMnNxc7JIMbByszB?= Message-ID: Подскажите пожалуйста, какая максимальная длина имени файла linux debian? ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From sitkarev на komitex.ru Sun Feb 13 12:51:28 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 11:51:28 +0300 Subject: [P&AM Lab] =?utf-8?b?0LzQsNC60YHQuNC80LDQu9GM0L3QsNGPINC00LvQuNC9?= =?utf-8?b?0LAg0LjQvNC10L3QuCDRhNCw0LnQu9Cw?= In-Reply-To: References: Message-ID: <4D579B90.9050906@komitex.ru> На тех UNIX которые мне попадались, нужно было включать . SUSv2 определяет две константы -- NAME_MAX и PATH_MAX. Первая -- размер в байтах имени файла, не включая завершающий нуль а вторая для полного пути, включая завершающий нуль. Некоторые ещё пользуются pathconf(3). Т.е. делаем так: char name[NAME_MAX+1]; char abspath[PATH_MAX]; В любом случае рекомендую к прочтению: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html -- Г.А. 13.02.2011 11:33, Константин Никулов пишет: > Подскажите пожалуйста, какая максимальная длина имени файла linux debian? From nateford на inbox.ru Sun Feb 13 18:27:27 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 17:27:27 +0300 Subject: [P&AM Lab] =?koi8-r?b?8NXU2CDLIMnT0M/MztHFzc/N1SDGwcrM1S4=?= Message-ID: Как в С в программе получить строчку с путем исполняемому файлу программы, которую пишем? ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From sitkarev на komitex.ru Sun Feb 13 18:30:50 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 17:30:50 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/Rg9GC0Ywg0Log0LjRgdC/0L7Qu9C90Y/QtdC80L4=?= =?utf-8?b?0LzRgyDRhNCw0LnQu9GDLg==?= In-Reply-To: References: Message-ID: <4D57EB1A.1050901@komitex.ru> По соглашению это argv[0] у main(). -- Г.А. 13.02.2011 17:27, Константин Никулов пишет: > Как в С в программе получить строчку с путем исполняемому файлу программы, которую пишем? > From nateford на inbox.ru Sun Feb 13 19:04:03 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 18:04:03 +0300 Subject: [P&AM Lab] =?koi8-r?b?KMLF2iDUxc3ZKQ==?= Message-ID: Странно, у меня там только название. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From sitkarev на komitex.ru Sun Feb 13 19:06:47 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 18:06:47 +0300 Subject: [P&AM Lab] =?utf-8?b?KNCx0LXQtyDRgtC10LzRiyk=?= In-Reply-To: References: Message-ID: <4D57F387.1080601@komitex.ru> Потому что ты его запускал из текущего каталога. Этот путь и попал через exec(2) в argv[0]. Запустишь через полный путь, от корня, будет в argv[0] путь от корня. В /proc//exe есть ссылка, она ссылается на исполняемый файл, абсолютный путь. Это в procfs у Linux так, в других может быть иначе. Если уж тебе прямо так надо знать именно путь от корня, прочитай эту ссылку через readlink(2) и делай что тебе хочется. -- Г.А. 13.02.2011 18:04, Константин Никулов пишет: > Странно, у меня там только название. > From sitkarev на komitex.ru Sun Feb 13 19:11:36 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 18:11:36 +0300 Subject: [P&AM Lab] =?utf-8?b?KNCx0LXQtyDRgtC10LzRiyk=?= In-Reply-To: <4D57F387.1080601@komitex.ru> References: <4D57F387.1080601@komitex.ru> Message-ID: <4D57F4A8.9070604@komitex.ru> Как вариант, можно и относительно текущего каталога выяснить что это за файл. Потому что exec выполнялся в текущем каталоге а он не меняется после вытеснения образа процесса другой программой. Текущий каталог в UNIX получают через getcwd(3). Относительно него и выясняй где у тебя фактически находится файл программы. -- Г.А. > В /proc//exe есть ссылка, она ссылается на исполняемый файл, > абсолютный путь. Это в procfs у Linux так, в других может быть иначе. > Если уж тебе прямо так надо знать именно путь от корня, прочитай эту > ссылку через readlink(2) и делай что тебе хочется. > From nateford на inbox.ru Sun Feb 13 19:14:10 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 18:14:10 +0300 Subject: [P&AM Lab] =?koi8-r?b?KMLF2iDUxc3ZKQ==?= In-Reply-To: <4D57F4A8.9070604@komitex.ru> References: <4D57F387.1080601@komitex.ru> <4D57F4A8.9070604@komitex.ru> Message-ID: Сейчас попробуем. Потом то, что получилось, сюда сброшу, послушаю критику. From sitkarev на komitex.ru Sun Feb 13 20:09:33 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 19:09:33 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <201102121954.16875.Lonely.RuyK@mail.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> Message-ID: <4D58023D.5060900@komitex.ru> Ну, что, по-порядку, то что важно: 1. Программа не соответствует ТЗ, в начале вывода присутствует посторонняя строка. Это значит что копировать файлы через cat недопустимо. В них будет добавлено нечто инородное. 2. Вывод нескольких файлов не работает. При попытке вывести два файла, программа свалилась в SIGSEGV :(( Запускал вот так. $ ./cat_lnly /etc/passwd /etc/shadow 3. Компиляция с -Wall выводит предупреждения, которых быть не должно. Надо исправить, привести типы и т.д. 4. С точки зрения проектирования утилиты самый существенный недостаток это пожалуй отсутствие вменяемой буферизации. Сейчас определён статический буфер размером 400 байт. Из каких соображений выбран размер не совсем понятно. В UNIX мы имеем дело или с "сырым" вводом/выводом, это когда запись/чтение производятся напрямую и когда ввод/вывод буферизован на уровне ядра через буферный кеш. Стратегия ввода-вывода для такой утилиты должна быть следующей: а) Если выводимый файл является блочным, то буфер для чтения выделяется динамически, размером кратным блоку устройства. Размер блока даётся в структуре stat в поле st_blksize (в байтах). Для вывода нам удобнее использовать функции стандартного ввода-вывода, где подбор буфера и тип буферизации осуществляется автоматически. б) Если выводимый файл символьный, то буфер берём какого-то заранее фиксированного размера, скорее всего он будет кратным степени двойки. 5. Остальное по мелочи -- после того как разберёмся с замечаниями выше. В целом, очень неплохо, хотя есть тенденция к некоторому усложнению, это лечится успешно и я расскажу как но позже. Приятно видеть что человек понимает как работает Си и машина. Результат будет. ОС Linux Debian Lenny, x86-64. -- Г.А. 12.02.2011 19:54, LonelyRuyK пишет: > Вот чего в результате получилось. Посоветуйте пожалуйста чего изменить можно. From Lonely.RuyK на mail.ru Sun Feb 13 21:34:35 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Sun, 13 Feb 2011 20:34:35 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <4D58023D.5060900@komitex.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <4D58023D.5060900@komitex.ru> Message-ID: <201102132034.35867.Lonely.RuyK@mail.ru> Спасибо. Сейчас всё исправлю, только вот не совсем понятно про вывод 2-х файлов. $ ./cat_lnly /etc/passwd /etc/shadow shadow ведь она и не должна показывать из-за прав доступа. С другими файлами у меня вроде работает.Можете скинуть вывод того что она вам понаписала? From sitkarev на komitex.ru Sun Feb 13 21:43:31 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 20:43:31 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <201102132034.35867.Lonely.RuyK@mail.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <4D58023D.5060900@komitex.ru> <201102132034.35867.Lonely.RuyK@mail.ru> Message-ID: <4D581843.3040300@komitex.ru> 13.02.2011 20:34, LonelyRuyK пишет: > Спасибо. Сейчас всё исправлю, только вот не совсем понятно про вывод 2-х > файлов. > $ ./cat_lnly /etc/passwd /etc/shadow > shadow ведь она и не должна показывать из-за прав доступа. С другими файлами у > меня вроде работает.Можете скинуть вывод того что она вам понаписала? Она и не показывает, она сваливается в SIGSEGV. Так что и вывода нет. Просто ошибка сегментации и привет. -- Г.А. From sitkarev на komitex.ru Sun Feb 13 21:53:08 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 20:53:08 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <201102132034.35867.Lonely.RuyK@mail.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <4D58023D.5060900@komitex.ru> <201102132034.35867.Lonely.RuyK@mail.ru> Message-ID: <4D581A84.2040500@komitex.ru> 13.02.2011 20:34, LonelyRuyK пишет: > Спасибо. Сейчас всё исправлю, только вот не совсем понятно про вывод 2-х > файлов. > $ ./cat_lnly /etc/passwd /etc/shadow > shadow ведь она и не должна показывать из-за прав доступа. С другими файлами у > меня вроде работает.Можете скинуть вывод того что она вам понаписала? Я ведь тебе не зря сказал чтобы ты поправил сначала все предупреждения, которые компилятор выдаёт с -Wall. Кроме того, подозреваю что у тебя машина 32-х разрядная, и потому у тебя этот код работает. А на 64-х разрядной будет валится в SIGSEGV. Позже я тебе объясню почему, сначала поправь то на что ругается gcc с флагом -Wall. По идее, ты бы должен был протестировать свой код и на 64-х разрядной машине, т.к. в мире UNIX они с давних пор существуют. Задолго до того как стали распространены на ПК-шках. Можешь поставить себе виртуалку и тестировать там. Правь предупреждения, потом я тебе объясню почему это происходит. -- Г.А. From nateford на inbox.ru Sun Feb 13 22:40:11 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 21:40:11 +0300 Subject: [P&AM Lab] =?koi8-r?b?88LSwdPZ18HAIMvPxCk=?= Message-ID: Сегодня весь день ваял, критикуйте) Хотя есть мысль сделать ввод через argv, но это уже не сегодня. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 4086 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Sun Feb 13 22:43:18 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 21:43:18 +0300 Subject: [P&AM Lab] =?utf-8?b?0KHQsdGA0LDRgdGL0LLQsNGOINC60L7QtCk=?= In-Reply-To: References: Message-ID: <4D582646.4@komitex.ru> Мы не сможем критиковать и предлагать, т.к. никакого даже минимального описания задачи и задумки нет. Для cat например было вообще целое ТЗ. А код, если он работает -- много ли накритикуешь, не понимая зачем он нужен? Нужно написать хотя бы пару предложений, с описанием идеи. -- Г.А. 13.02.2011 21:40, Константин Никулов пишет: > Сегодня весь день ваял, критикуйте) Хотя есть мысль сделать ввод через argv, но это уже не сегодня. From nateford на inbox.ru Sun Feb 13 22:53:33 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 21:53:33 +0300 Subject: [P&AM Lab] =?koi8-r?b?58XOxdLB1M/SINDB0s/Mxco=?= Message-ID: Задача - написать генератор хороших (случайных) равновероятных паролей задаваемой пользователем длины до 256 символов, состоящих из заглавных и строчных букв английского алфавита и цифр, с выводом (по желанию) в файл в какой-нибудь существующей папке. Собственно, вот ее решение) Сейчас сброшу код с комментами... ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: From nateford на inbox.ru Sun Feb 13 23:30:29 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 22:30:29 +0300 Subject: [P&AM Lab] =?koi8-r?b?58XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: References: Message-ID: Вот, код с комментариями. ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 4086 bytes Desc: отсутствует URL: From nateford на inbox.ru Sun Feb 13 23:32:34 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 22:32:34 +0300 Subject: [P&AM Lab] =?koi8-r?b?x8XOxdLB1M/SINDB0s/Mxco=?= Message-ID: Прощу прощения, не тот файл сбросил. Вот в этом... ----------- следущая часть ----------- Вложение в формате HTML было извлечено… URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 6956 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Sun Feb 13 23:34:19 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 22:34:19 +0300 Subject: [P&AM Lab] =?utf-8?b?0JPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: References: Message-ID: <4D58323B.5020907@komitex.ru> Уже лучше. Будет много замечаний интересных. Но скорее всего уже завтра. Прогресс есть. -- Г.А. 13.02.2011 22:30, Константин Никулов пишет: > Вот, код с комментариями. From Lonely.RuyK на mail.ru Sun Feb 13 23:47:58 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Sun, 13 Feb 2011 22:47:58 +0300 Subject: [P&AM Lab] =?utf-8?b?0JPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: <4D58323B.5020907@komitex.ru> References: <4D58323B.5020907@komitex.ru> Message-ID: <201102132247.58294.Lonely.RuyK@mail.ru> Единственный небольшой недочёт который заметил это неравномерное распределение вероятности для буковок и циферок(любая из циферок вылетает с вероятностью 1/3*1/10 а любая из буковок(в нижнем или верхнем регистре) с вероятностью 1/3*1/26), но эт наверное придирки уже From sitkarev на komitex.ru Mon Feb 14 00:05:57 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 13 Feb 2011 23:05:57 +0300 Subject: [P&AM Lab] =?utf-8?b?0JPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: <201102132247.58294.Lonely.RuyK@mail.ru> References: <4D58323B.5020907@komitex.ru> <201102132247.58294.Lonely.RuyK@mail.ru> Message-ID: <4D5839A5.7050107@komitex.ru> 13.02.2011 22:47, LonelyRuyK пишет: > Единственный небольшой недочёт который заметил это неравномерное распределение > вероятности для буковок и циферок(любая из циферок вылетает с вероятностью > 1/3*1/10 а любая из буковок(в нижнем или верхнем регистре) с вероятностью > 1/3*1/26), но эт наверное придирки уже Нет, Боря, не придирки. К тому же "засолка" некую политику в любом случае потребует, т.к. стоит учитывать что хороший пароль он не просто случайный но ещё и должен запоминаться человеком. Это уже дальнейшее развитие и доработка, на будущее. И это не единственный недочёт, и это хорошо -- лучше разбирать программы с ошибками чем без них. Завтра я напишу подробнее где не порядок и что с этим делать. -- Г.А. From nateford на inbox.ru Mon Feb 14 00:40:37 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 13 Feb 2011 23:40:37 +0300 Subject: [P&AM Lab] =?koi8-r?b?58XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: <201102132247.58294.Lonely.RuyK@mail.ru> References: <4D58323B.5020907@komitex.ru> <201102132247.58294.Lonely.RuyK@mail.ru> Message-ID: проблема с распределением, вроде бы, решается несложной заменой: tag = lrand48() % 62; switch (tag) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: password[i] = (char)(48 + tag); break; case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: password[i] = (char)(55 + tag); break; case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59: case 60: case 61: password[i] = (char)(61 + tag); break; default: printf("Tag has bad value.\n"); exit(1); } Ничего лучше в голову не идет, к сожалению. Sun, 13 Feb 2011 22:47:58 +0300 письмо от LonelyRuyK : > Единственный небольшой недочёт который заметил это неравномерное распределение > вероятности для буковок и циферок(любая из циферок вылетает с вероятностью > 1/3*1/10 а любая из буковок(в нижнем или верхнем регистре) с вероятностью > 1/3*1/26), но эт наверное придирки уже > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab From Lonely.RuyK на mail.ru Mon Feb 14 00:46:33 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Sun, 13 Feb 2011 23:46:33 +0300 Subject: [P&AM Lab] =?utf-8?b?0JPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: References: <201102132247.58294.Lonely.RuyK@mail.ru> Message-ID: <201102132346.33707.Lonely.RuyK@mail.ru> ну. чтонить типа tag = lrand48() % 62; if( tag<10) password[i] = (char)(48 + tag); else if (tag<35) password[i] = (char)(55 + tag); else password[i] = (char)(61 + tag); From nateford на inbox.ru Mon Feb 14 07:50:44 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Mon, 14 Feb 2011 06:50:44 +0300 Subject: [P&AM Lab] =?koi8-r?b?58XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: <201102132346.33707.Lonely.RuyK@mail.ru> References: <201102132346.33707.Lonely.RuyK@mail.ru> Message-ID: точно. А я все думал, как это короче сделать.. From sitkarev на komitex.ru Tue Feb 15 01:46:31 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 15 Feb 2011 00:46:31 +0300 Subject: [P&AM Lab] =?utf-8?b?0LPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: References: Message-ID: <4D59A2B7.8010404@komitex.ru> Уже поздно. Завтра утром наверное прочтёте. 1. Давайте договоримся что комментарии мы будем стараться писать на английском языке, это полезно с точки зрения языковой практики, набора словарного запаса и пригодится в будущем -- не все программисты говорят на русском, но почти все понимают английский. 2. Хоть программа и не большая, даже здесь лучше бы было разбить её на ряд чётких, небольших функций. Каждая из которых выполняет одно действие и делает это хорошо. Хорошие программы состоят не из малого числа больших функций, а большого числа малых. 3. В K&R С внутри switch ключевые слова case не нужно отделять ещё раз табуляцией. Они относятся к тому же уровню вложенности. switch (tag) { case 0: ... break; case 1: ... break; ... } 4. Если мы хотим вывести строку на терминал, не надо это делать посимвольно: for (i = 0; i < passlen; i++) { printf("%c", password[i]); } Нужно было сначала терминировать нулём строку в password, и объявлять этот массив нужно было наверное так: #define MAX_LENGTH 255 int main(int argc, char *argv[]) { ... char password[MAX_LENGTH+1]; ... for (i = 0; i < passlen; i++) { tag = lrand48() % 3; ... } //Выводим пароль на экран, чтобы было не так грустно// printf("Password: "); password[passlen] = '\0'; printf("%s", password); Думаю что идея ясна. 5. Думаю что стоит читать полностью строку в буфер из stdin через fgets(3) а потом травить на неё strcasecmp(3) и проверять что там ввёл пользователь и устанавливать флаг. Другой вариант, переписать проще цикл, и не забыть про tolower(3). 6. Делать проверку повторно на confirm == 'Y' и confirm == 'y' не нужно. Для этого нужно было ранее сделать переменную-флаг и проверять её. if (write_to_file) { ... } 7. Дальше, очень сложно сделано считывание путей. Наверно городить огород с динамическим выделением памяти для буферов не стоит, да и читать посимвольно и каждый раз увеличивать буфера на 1 байт тоже. Кроме того, очень сложные условия стоят в циклах, этого нужно стараться избегать. Они должны быть предельно простыми и идиоматичными. А уже внутри цикла проверяйте условия ещё раз и пользуйтесь оператором break. for (pathlen = 0; (((c = getchar()) != EOF) && (c != '\n') && (pathlen != PATH_MAX) ); pathlen++) { ... } Проще бы было: for (pathlen = 0; (c = getchar()) != EOF; pathlen++) { if (c == '\n') break; if (pathlen >= PATH_MAX-1) break; ... } Обратите внимание что я проверяю PATH_MAX-1, потому что нужно ещё место для терминирующего нуля. Про буфера я уже сказал, никаких malloc(3)/realloc(3) там всё же не нужно. Достаточно буферов статического размера. POSIX/SUSv2 гарантирует что имена файлов и путей вместятся в эти лимиты: char filename[NAME_MAX+1]; char pathname[PATH]; char path[PATH]; У нас в рассылке раньше где-то было сообщение о том что это за лимиты и откуда они взялись. И всё равно не понятно, почему отдельно просят файл а потом ещё и каталог? Если можно сразу попросить ввести путь. И в UNIX обычно так и делается. Если просят ввести путь к файлу, то туда можно вводить абсолютный и относительный пути (если не оговорено обратное). Системный вызов open(2) вообще-то открывает путь как относительный так и абсолютный. Может быть в этом была загвоздка? 8. Читать, ещё раз повторюсь, посимвольно через getchar(3) наверное не стоит в тех случаях. Проще сделать это через fgets(3). 9. Принято в большинстве случаев сообщения на stderr и в лог-файлы отправлять без завершающей точки. Обратите внимание как пишет ядро на консоль и в логи, как ведут себя другие прикладные программы и утилиты. Отмечу что грамматически сообщения составлены корректно и ясно отражают смысл ошибок/событий. Как итог, программу можно существенно упростить, она будет короче, понятнее и яснее. Есть над чем потрудиться. Когда я что-то ещё вспомню, напишу в рассылку. Очень приятно видеть что идёт процесс, приходит понимание и присутствует творчество. Нужно идти вперёд. -- Г.А. 13.02.2011 22:32, Константин Никулов пишет: > Прощу прощения, не тот файл сбросил. Вот в этом... From sitkarev на komitex.ru Tue Feb 15 16:20:56 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 15 Feb 2011 15:20:56 +0300 Subject: [P&AM Lab] =?utf-8?b?0LPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: <4D59A2B7.8010404@komitex.ru> References: <4D59A2B7.8010404@komitex.ru> Message-ID: <4D5A6FA8.5050905@komitex.ru> Здесь имелось в виду: #include ... char filename[NAME_MAX+1]; char pathname[PATH_MAX]; char path[PATH_MAX]; > Про буфера я уже сказал, никаких malloc(3)/realloc(3) там всё же не > нужно. Достаточно буферов статического размера. POSIX/SUSv2 гарантирует > что имена файлов и путей вместятся в эти лимиты: > > char filename[NAME_MAX+1]; > char pathname[PATH]; > char path[PATH]; > > У нас в рассылке раньше где-то было сообщение о том что это за лимиты и > откуда они взялись. -- Г.А. From nateford на inbox.ru Tue Feb 15 16:47:43 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Tue, 15 Feb 2011 15:47:43 +0300 Subject: [P&AM Lab] =?koi8-r?b?x8XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: <4D5A6FA8.5050905@komitex.ru> References: <4D59A2B7.8010404@komitex.ru> <4D5A6FA8.5050905@komitex.ru> Message-ID: Спасибо большое, приму все к сведению. Сейчас сяду перепиывать, как закончу - сброшу то, что получилось. Tue, 15 Feb 2011 15:20:56 +0300 письмо от "Grigoriy A. Sitkarev" : > Здесь имелось в виду: > > #include > > ... > > char filename[NAME_MAX+1]; > char pathname[PATH_MAX]; > char path[PATH_MAX]; > > > Про буфера я уже сказал, никаких malloc(3)/realloc(3) там всё же не > > нужно. Достаточно буферов статического размера. POSIX/SUSv2 гарантирует > > что имена файлов и путей вместятся в эти лимиты: > > > > char filename[NAME_MAX+1]; > > char pathname[PATH]; > > char path[PATH]; > > > > У нас в рассылке раньше где-то было сообщение о том что это за лимиты и > > откуда они взялись. > > -- > Г.А. > > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab From nateford на inbox.ru Tue Feb 15 20:15:30 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Tue, 15 Feb 2011 19:15:30 +0300 Subject: [P&AM Lab] =?koi8-r?b?x8XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: <4D5A6FA8.5050905@komitex.ru> References: <4D59A2B7.8010404@komitex.ru> <4D5A6FA8.5050905@komitex.ru> Message-ID: Почти все переделал - стало гораздо проще и короче) Единственная проблема - если использовать fgets для получения пути, то записываемые файлы приобретают в конце символ '\n'. Tue, 15 Feb 2011 15:20:56 +0300 письмо от "Grigoriy A. Sitkarev" : > Здесь имелось в виду: > > #include > > ... > > char filename[NAME_MAX+1]; > char pathname[PATH_MAX]; > char path[PATH_MAX]; > > > Про буфера я уже сказал, никаких malloc(3)/realloc(3) там всё же не > > нужно. Достаточно буферов статического размера. POSIX/SUSv2 гарантирует > > что имена файлов и путей вместятся в эти лимиты: > > > > char filename[NAME_MAX+1]; > > char pathname[PATH]; > > char path[PATH]; > > > > У нас в рассылке раньше где-то было сообщение о том что это за лимиты и > > откуда они взялись. > > -- > Г.А. > > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab From sitkarev на komitex.ru Tue Feb 15 20:29:04 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 15 Feb 2011 19:29:04 +0300 Subject: [P&AM Lab] =?utf-8?b?0LPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: References: <4D59A2B7.8010404@komitex.ru> <4D5A6FA8.5050905@komitex.ru> Message-ID: <4D5AA9D0.9060301@komitex.ru> Костя, Ты во-первых, не спеши. Это раз. Во-вторых, то что fgets() записывает нам символ переноса каретки -- это прелестно. Потому что мы точно знаем что ввод был завершён и у нас есть все символы, которые вводил пользователь. Думаю что на примере ниже всё будет понятно. Объяснения не нужны. #define MAX_BUF void read_line() { char buf[MAX_BUF]; char *cp; int len; cp = fgets(buf, sizeof(buf), stdin); if (cp == NULL) { fprintf(stderr, "can't read stdin\n"); ... } len = strlen(buf); if (buf[len-1] != '\n') { fprintf(stderr, "input line too long\n"); ... } buf[--len] = '\0'; /* Now buf has a string without '\n' and len is it's length.*/ ... } -- Г.А. 15.02.2011 19:15, Константин Никулов пишет: > Почти все переделал - стало гораздо проще и короче) Единственная проблема - если использовать fgets для получения пути, то записываемые файлы приобретают в конце символ '\n'. From sitkarev на komitex.ru Tue Feb 15 20:31:26 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 15 Feb 2011 19:31:26 +0300 Subject: [P&AM Lab] =?utf-8?b?0LPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: <4D5AA9D0.9060301@komitex.ru> References: <4D59A2B7.8010404@komitex.ru> <4D5A6FA8.5050905@komitex.ru> <4D5AA9D0.9060301@komitex.ru> Message-ID: <4D5AAA5E.2010408@komitex.ru> Да, и конечно же, нужно проверить что len > 0. Это до того как мы начнём в buf что-то изменять. > len = strlen(buf); > > if (buf[len-1] != '\n') { > fprintf(stderr, "input line too long\n"); > ... > } > > buf[--len] = '\0'; -- Г.А. From nateford на inbox.ru Tue Feb 15 20:38:49 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Tue, 15 Feb 2011 19:38:49 +0300 Subject: [P&AM Lab] =?koi8-r?b?x8XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: <4D5AAA5E.2010408@komitex.ru> References: <4D5AA9D0.9060301@komitex.ru> <4D5AAA5E.2010408@komitex.ru> Message-ID: Тут есть проверка на ошибку у fgets. А какие у него ошибки-то могут быть? В мане не написано. Tue, 15 Feb 2011 19:31:26 +0300 письмо от "Grigoriy A. Sitkarev" : > Да, и конечно же, нужно проверить что len > 0. Это до того как мы начнём > в buf что-то изменять. > > > len = strlen(buf); > > > > if (buf[len-1] != '\n') { > > fprintf(stderr, "input line too long\n"); > > ... > > } > > > > buf[--len] = '\0'; > > -- > Г.А. > > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab From sitkarev на komitex.ru Tue Feb 15 21:09:12 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 15 Feb 2011 20:09:12 +0300 Subject: [P&AM Lab] =?utf-8?b?0LPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+0LvQtdC5?= In-Reply-To: References: <4D5AA9D0.9060301@komitex.ru> <4D5AAA5E.2010408@komitex.ru> Message-ID: <4D5AB338.5010708@komitex.ru> В man-е написано: gets() and fgets() return s on success, and NULL on error or when end of file occurs while no characters have been read. Нужна проверка на NULL, обязательно. Откуда берутся ошибки? Считается что это очевидно тем кто пользуется функциями буферизованного ввода-вывода, т.к. они по сути лишь обёртки над низкоуровневым вводом/выводом. А это значит что всё что может случиться с read(2), write(2) может случиться и с fgets(3). За одной только разницей что в случае с fgets(3) нам уже не важно по какой причине -- или была ошибка или не было. Если это был сигнал, то errno будет соответствующим образом установлено и всё. Лучше показать на примере. Скомпилируйте и запустите вот эту программу из вложения а потом проведите такой эксперимент: 1. вместо ввода строки нажмите Ctrl+D; 2. пошлите процессу сигнал SIGUSR1. И станет понятно, откуда там ошибки. По итогу станет ясно что проверять что вернул fgets(3) нужно обязательно. -- Г.А. 15.02.2011 19:38, Константин Никулов пишет: > Тут есть проверка на ошибку у fgets. А какие у него ошибки-то могут быть? В мане не написано. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: stdioerr.c Type: text/x-csrc Size: 733 bytes Desc: отсутствует URL: From Lonely.RuyK на mail.ru Tue Feb 15 22:18:24 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Tue, 15 Feb 2011 21:18:24 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <4D581A84.2040500@komitex.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <201102132034.35867.Lonely.RuyK@mail.ru> <4D581A84.2040500@komitex.ru> Message-ID: <201102152118.24914.Lonely.RuyK@mail.ru> Вроде бы ввёл поправки по основным пунктам.К сожалению пока не тестил на 64бит, изза того что с регистрацией на vmware проблемы. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: cat_lnly.c Type: text/x-csrc Size: 3313 bytes Desc: отсутствует URL: From nateford на inbox.ru Tue Feb 15 22:26:28 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Tue, 15 Feb 2011 21:26:28 +0300 Subject: [P&AM Lab] =?koi8-r?b?Q2F0IPT6?= In-Reply-To: <201102152118.24914.Lonely.RuyK@mail.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <4D581A84.2040500@komitex.ru> <201102152118.24914.Lonely.RuyK@mail.ru> Message-ID: Григорий Александрович, напомните пожалуйста, какая функция копирует одну строку в другую? Tue, 15 Feb 2011 21:18:24 +0300 письмо от LonelyRuyK : > Вроде бы ввёл поправки по основным пунктам.К сожалению пока не тестил на > 64бит, изза того что с регистрацией на vmware проблемы. > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab From sitkarev на komitex.ru Tue Feb 15 22:32:52 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 15 Feb 2011 21:32:52 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: References: <201102121954.16875.Lonely.RuyK@mail.ru> <4D581A84.2040500@komitex.ru> <201102152118.24914.Lonely.RuyK@mail.ru> Message-ID: <4D5AC6D4.2080405@komitex.ru> strncpy(3) эта функция называется. С ней тоже нужно аккуратно, потому что она не гарантирует нуль-терминирование строки назначения. Нужно это делать самому или написать обвёртку и назвать safe_strncpy() например. Вообще по строкам можете почитать док-ю у GNU libc, правда она не очень компактна, можете просто пропускать то что имеет префикс (w*). -- Г.А. 15.02.2011 21:26, Константин Никулов пишет: > Григорий Александрович, напомните пожалуйста, какая функция копирует одну строку в другую? From sitkarev на komitex.ru Tue Feb 15 22:35:06 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 15 Feb 2011 21:35:06 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <4D5AC6D4.2080405@komitex.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <4D581A84.2040500@komitex.ru> <201102152118.24914.Lonely.RuyK@mail.ru> <4D5AC6D4.2080405@komitex.ru> Message-ID: <4D5AC75A.4060500@komitex.ru> http://www.gnu.org/s/libc/manual/html_node/String-and-Array-Utilities.html#String-and-Array-Utilities > Вообще по строкам можете почитать док-ю у GNU libc, правда она не очень > компактна, можете просто пропускать то что имеет префикс (w*). > -- Г.А. From nateford на inbox.ru Tue Feb 15 22:35:57 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Tue, 15 Feb 2011 21:35:57 +0300 Subject: [P&AM Lab] =?koi8-r?b?58XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: <4D5AB338.5010708@komitex.ru> References: <4D5AB338.5010708@komitex.ru> Message-ID: Ну, вроде бы все поправил, а так же добавил возможность давать длину пароля и путь к файлу как ключи при запуске программы =) Жду замечаний.. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 4093 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Tue Feb 15 23:43:11 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 15 Feb 2011 22:43:11 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <201102152118.24914.Lonely.RuyK@mail.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <201102132034.35867.Lonely.RuyK@mail.ru> <4D581A84.2040500@komitex.ru> <201102152118.24914.Lonely.RuyK@mail.ru> Message-ID: <4D5AD74F.9060408@komitex.ru> 15.02.2011 21:18, LonelyRuyK пишет: > Вроде бы ввёл поправки по основным пунктам.К сожалению пока не тестил на > 64бит, изза того что с регистрацией на vmware проблемы. Может быть стоит попробовать не vmware а какой-нибудь bochs или qemu? Теперь по ходу текста программы замечания (самые важные). 1. Не понятно выходит у нас с BUFSIZE и count. Зачем-то делаем count = BUFSIZE-1 а потом при аллокации буфера для чтения обратно прибавляем к count+1. 2. Самый первый цикл while в main удивительно сложный в условии. Вообще, лучше использовать ф-ю getopt(3) для разбора опций. Раньше её не было просто в библиотеке, поэтому старые утилиты обходились без неё. 3. В switch лучше case оставить на том же уровне вложенности. switch (*arg) { case 'n': { nflg++; break; } ... 4. Долго думал как же расшифровывается имя переменной fsti и так и не придумал. Наверное нужно выбрать какое-то вменяемое имя. 5. Закрывать файлы если мы делаем exit() в большинстве случаев не нужно. Потому что exit() их сам закроет и все ресурсы высвободит. Это лишнее. 6. Проверка на блочность сделана не совсем верно. Блочным будет и простой файл и файл блочного устройства. Т.е. надо: if (S_ISREG(st.st_mode) || S_ISBLK(st.st_mode)) { ... Почему? Потому что блочное устройство у нас тоже будет эффективно читаться блоками. 7. Если я буду cat-ить файл например с флешки, а потом возьму и выдерну её, то программа будет работать неверно. Она может затереть чужие данные в куче (heap) потому что read(2) вернёт -1, а проверки там нет. Сейчас там так: res = read(fd, buff, count); buff[res] = '\0'; Мы не проверили, вернул ли read число > 0. Если была ошибка и read(2) вернул -1, то мы затрём что-то не наше в куче (heap). Для такой маленькой программы это пройдёт незаметно, но для той которая работает продолжительное время это однозначно приведёт к падению в SIGSEGV рано или поздно. Такие ошибки очень трудно искать. Кроме того, программа может получить сигнал например. Мы сейчас не обрабатываем сигналы никак и поэтому любой сигнал приведёт к завершению процесса, но даже теоретически -- надо предусмотреть такой случай. Здесь наверное нужно было сделать что-то вроде: for (;;) { res = read(fd, buff, count); if (res == -1 && errno == EINTR) continue; if (res == 0) { /* Handle end of file. */ ... } else if (res < 0) { /* Handle error. */ } /* Now do something with input. */ ... } Это практически идиома. 8. Не понятно, почему использован цикл for: i = 0; for(; i Поправил пару ошибок, изгнал заполнение пароля из main() в отдельную функцию, поправил название rnd_char() на select_char(), немного поправил сообщения и функцию post_message(). > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 4288 bytes Desc: отсутствует URL: From nateford на inbox.ru Wed Feb 16 13:27:07 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Wed, 16 Feb 2011 12:27:07 +0300 Subject: [P&AM Lab] =?koi8-r?b?RndkOiAg58XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: References: Message-ID: С утра нашел еще пару ошибок, пофиксил. Вот окончательный вариант: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 4240 bytes Desc: отсутствует URL: From rg-400 на list.ru Thu Feb 17 11:29:20 2011 From: rg-400 на list.ru (rg-400) Date: Thu, 17 Feb 2011 10:29:20 +0300 Subject: [P&AM Lab] =?koi8-r?b?RndkOiDnxc7F0sHUz9Ig0MHSz8zFyg==?= In-Reply-To: References: Message-ID: <4D5CCE50.7020803@list.ru> Зачем писать в файл пароль? Можно выводить на стандартный вывод, а уж там пусть пользователь может перенаправить вывод в файл или куда ему угодно. Скорее нужно добавить опции, чтобы было удобнее вводить размер генерируемого пароля и еще можно задавать набор символов, из которых будет состоять пароль. From nateford на inbox.ru Thu Feb 17 12:01:15 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Thu, 17 Feb 2011 11:01:15 +0300 Subject: [P&AM Lab] =?koi8-r?b?RndkOiAg58XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: <4D5CCE50.7020803@list.ru> References: <4D5CCE50.7020803@list.ru> Message-ID: Идея хорошая, но изначально была другая: с определенным набором символов и с выводом в файл (кстати говоря, ПО ЖЕЛЕНИЮ). Хотя мысль интересная, займусь ей. Насчет размера пароля не слогласен - мы число вводим, куда уж удобнее. Thu, 17 Feb 2011 10:29:20 +0300 письмо от rg-400 : > Зачем писать в файл пароль? > Можно выводить на стандартный вывод, а уж там пусть пользователь может > перенаправить вывод в файл или куда ему угодно. > Скорее нужно добавить опции, чтобы было удобнее вводить размер > генерируемого пароля и еще можно задавать набор символов, из которых > будет состоять пароль. From sitkarev на komitex.ru Thu Feb 17 12:23:41 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Thu, 17 Feb 2011 11:23:41 +0300 Subject: [P&AM Lab] =?utf-8?b?RndkOiDQk9C10L3QtdGA0LDRgtC+0YAg0L/QsNGA0L4=?= =?utf-8?b?0LvQtdC5?= In-Reply-To: References: <4D5CCE50.7020803@list.ru> Message-ID: <4D5CDB0D.5030406@komitex.ru> Егор дело говорит. Есть конечно много других замечаний, я сегодня вечером наверное успею написать. Но про длину пароля опцией с командой строки -- это верно. Нужно сделать так чтобы твоей утилитой можно было пользоваться из скриптов shell. Если же она всё время что-то просит с stdin это делать сложно. В UNIX так не принято. Ты можешь сделать и интерактивный и batch режимы: в последнем случае все параметры программа получает через командную строку и ничего с stdin не просит. -- Г.А. 17.02.2011 11:01, Константин Никулов пишет: > Идея хорошая, но изначально была другая: с определенным набором символов и с выводом в файл (кстати говоря, ПО ЖЕЛЕНИЮ). Хотя мысль интересная, займусь ей. Насчет размера пароля не слогласен - мы число вводим, куда уж удобнее. > > Thu, 17 Feb 2011 10:29:20 +0300 письмо от rg-400: > >> Зачем писать в файл пароль? >> Можно выводить на стандартный вывод, а уж там пусть пользователь может >> перенаправить вывод в файл или куда ему угодно. >> Скорее нужно добавить опции, чтобы было удобнее вводить размер >> генерируемого пароля и еще можно задавать набор символов, из которых >> будет состоять пароль. From rg-400 на list.ru Thu Feb 17 13:15:27 2011 From: rg-400 на list.ru (=?utf-8?Q?=D0=95=D0=B3=D0=BE=D1=80_=D0=9E=D0=B4=D0=B8=D0=BD=D1=86=D0=BE=D0=B2?=) Date: Thu, 17 Feb 2011 12:15:27 +0300 Subject: [P&AM Lab] =?utf-8?b?RndkOiAg0JPQtdC90LXRgNCw0YLQvtGAINC/0LDRgNC+?= =?utf-8?b?0LvQtdC5?= In-Reply-To: References: <4D5CCE50.7020803@list.ru> Message-ID: Можешь еще посмотреть утилиту pwgen( её можно скачать с репозитория). From nateford на inbox.ru Thu Feb 17 13:33:10 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Thu, 17 Feb 2011 12:33:10 +0300 Subject: [P&AM Lab] =?koi8-r?b?RndkOiAg58XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: <4D5CDB0D.5030406@komitex.ru> References: <4D5CDB0D.5030406@komitex.ru> Message-ID: Григорий Александрович, мысль насчет ввода с командной строки ко мне приходила, и даже была реализована: в последнем выложенном варианте он уже есть. Значит надо просто обрезать вывод, чтобы давал только пароль, ограничить функцию сохранения пароля, и добавить регулировку алфавита пароля? Thu, 17 Feb 2011 11:23:41 +0300 письмо от "Grigoriy A. Sitkarev" : > Егор дело говорит. > > Есть конечно много других замечаний, я сегодня вечером наверное успею > написать. > > Но про длину пароля опцией с командой строки -- это верно. Нужно сделать > так чтобы твоей утилитой можно было пользоваться из скриптов shell. Если > же она всё время что-то просит с stdin это делать сложно. В UNIX так не > принято. > > Ты можешь сделать и интерактивный и batch режимы: в последнем случае все > параметры программа получает через командную строку и ничего с stdin не > просит. > > -- > Г.А. > > 17.02.2011 11:01, Константин Никулов пишет: > > Идея хорошая, но изначально была другая: с определенным набором символов и с > выводом в файл (кстати говоря, ПО ЖЕЛЕНИЮ). Хотя мысль интересная, займусь ей. > Насчет размера пароля не слогласен - мы число вводим, куда уж удобнее. > > > > Thu, 17 Feb 2011 10:29:20 +0300 письмо от rg-400: > > > >> Зачем писать в файл пароль? > >> Можно выводить на стандартный вывод, а уж там пусть пользователь может > >> перенаправить вывод в файл или куда ему угодно. > >> Скорее нужно добавить опции, чтобы было удобнее вводить размер > >> генерируемого пароля и еще можно задавать набор символов, из которых > >> будет состоять пароль. From nateford на inbox.ru Thu Feb 17 13:34:09 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Thu, 17 Feb 2011 12:34:09 +0300 Subject: [P&AM Lab] =?koi8-r?b?RndkOiAg58XOxdLB1M/SINDB0s/Mxco=?= In-Reply-To: References: Message-ID: Спасибо, обязательно посмотрю. Thu, 17 Feb 2011 12:15:27 +0300 письмо от Егор Одинцов : > Можешь еще посмотреть утилиту pwgen( её можно скачать с репозитория). From sitkarev на komitex.ru Thu Feb 17 13:37:59 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Thu, 17 Feb 2011 12:37:59 +0300 Subject: [P&AM Lab] =?utf-8?b?RndkOiDQk9C10L3QtdGA0LDRgtC+0YAg0L/QsNGA0L4=?= =?utf-8?b?0LvQtdC5?= In-Reply-To: References: <4D5CDB0D.5030406@komitex.ru> Message-ID: <4D5CEC77.3020100@komitex.ru> Руки и глаза ещё не дошли внимательно посмотреть -- позже обязательно. Можешь начать делать, как я напишу замечания, исправить а главное понять почему нужно делать так-то и так-то -- потом покажешь что получится. -- Г.А. 17.02.2011 12:33, Константин Никулов пишет: > Григорий Александрович, мысль насчет ввода с командной строки ко мне приходила, и даже была реализована: в последнем выложенном варианте он уже есть. Значит надо просто обрезать вывод, чтобы давал только пароль, ограничить функцию сохранения пароля, и добавить регулировку алфавита пароля? From Lonely.RuyK на mail.ru Fri Feb 18 00:47:25 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Thu, 17 Feb 2011 23:47:25 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <4D5AD74F.9060408@komitex.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <201102152118.24914.Lonely.RuyK@mail.ru> <4D5AD74F.9060408@komitex.ru> Message-ID: <201102172347.25669.Lonely.RuyK@mail.ru> Старые ошибки вроде бы исправил( надеюсь новых не наделал), вот чего получилось в результате. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: cat_lnly_1.04.c Type: text/x-csrc Size: 3510 bytes Desc: отсутствует URL: From rg-400 на list.ru Fri Feb 18 01:09:30 2011 From: rg-400 на list.ru (=?UTF-8?B?0JXQs9C+0YAg0J7QtNC40L3RhtC+0LI=?=) Date: Fri, 18 Feb 2011 00:09:30 +0300 Subject: [P&AM Lab] =?utf-8?b?Q2F0INCi0Jc=?= In-Reply-To: <201102172347.25669.Lonely.RuyK@mail.ru> References: <201102121954.16875.Lonely.RuyK@mail.ru> <201102152118.24914.Lonely.RuyK@mail.ru> <4D5AD74F.9060408@komitex.ru> <201102172347.25669.Lonely.RuyK@mail.ru> Message-ID: <4D5D8E8A.6030502@list.ru> Если есть > if(sifi) > fd = fileno (stdin); > else > fd = open(*(argv++),O_RDONLY); , то должно быть в конце так: if(!sifi) close(fd); Иначе ты закрываешь стандартный ввод. У close тоже нужно проверять возвращаемое значение и лучше открывать файл последним (после всех проверок). И имя sifi не лучше fsti. И будет не понятно когда она 1(истина), а когда 0(ложь). Нужно чтобы однозначно можно было сказать и зачем эта переменная и о ее значении (is_file или is_stdin) From sitkarev на komitex.ru Sun Feb 20 05:53:38 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 20 Feb 2011 04:53:38 +0300 Subject: [P&AM Lab] =?utf-8?b?RFNQIC0tINGE0LjQu9GM0YLRgNCw0YbQuNGPINC40Lc=?= =?utf-8?b?0L7QsdGA0LDQttC10L3QuNC5?= Message-ID: <4D607422.2000008@komitex.ru> Всех приветствую! Кто вдруг не подписывался на список CDev, обратите внимание пожалуйста на этот пост. Там есть программа которая применяет к изображению Гауссов фильтр и получает на выходе эффект размытия (блюр). http://wiki.syktsu.ru/pipermail/cdev/2011-February/000880.html Это основы цифровой обработки сигналов -- фильтры, конволюция и т.д. -- Г.А. From ilyaart90 на rambler.ru Sun Feb 20 21:52:54 2011 From: ilyaart90 на rambler.ru (=?windows-1251?B?yOv8/yDA8PLl5eI=?=) Date: Sun, 20 Feb 2011 20:52:54 +0300 Subject: [P&AM Lab] =?windows-1251?b?5+Dr5ebg4vjo6fH/IO/u7/Pj4On36Oo=?= Message-ID: <468281912.1298224374.162944888.59370@mcgi43.rambler.ru> Григорий Александрович! сегодня наконец-то взялся и разобрался с попугайчиком, но только у него не работает эквалайзер, почему-то он его не выводит при проигровании семпла. а выкидывает только в конце. это из-за того что stdout занят? вот первоначальный исходник, только я в нем вставил цикл при записи из буфера (write ( fd, p, n/100 ) ), чтобы читал по кускам ( по 400 байтов для вывода эквалайзера после каждого прохода) #include #include #include #include #include #include #include #include #include # define BUFSIZE 8000*10 #define SAMPLES 100 int main(int argc, char **argv){ int res, arg, fd; unsigned char buffer[BUFSIZE]; fd = open("/dev/dsp", O_RDWR); if (res == -1) { perror("can't /dev/dsp"); exit(1); } arg = 1; printf("%d", fd); res = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg); if (res==-1){ perror("failed SOUND_PCM_WRITE_CHANNELS"); exit(1); } arg = 8; res = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg); if (res == -1) { perror("failed SOUND_PCM_WRITE_BITS"); exit(1); } arg = 8000; res = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg); if (res == -1) { perror("failed SOUND_PCM_WRITE_RATE"); exit(1); } for (;;) { printf("\n \n"); printf("press return the start..."); gets(stdin); printf("recording... "); res = read(fd, buffer, sizeof(buffer)/2); if (res == -1) perror("failed reading /dev/dsp"); if (res > 0) { unsigned char *p; unsigned int i, left, sval, n, cnt; float aver, max; char *eqline = "=============================================================="; p = buffer; left = res; while (left) { n = left <= SAMPLES ? SAMPLES : left; aver = 0.0; max = 0.0; for ( i=0; i max ? sval : max; } aver /= n; cnt = (max/128)*strlen(eqline); for (i=0; i<100; i++){ res = write(fd, p, n/100); p +=400; printf("\033[2K"); printf("Average=%05.1f Max=%05.1f %s", aver, max, eqline+(strlen(eqline)-cnt)); } fflush(stdout); if (res == -1) perror("writing /dev/dsp failed"); p += n; left -=n; } } } res = close(fd); if (res == -1){ perror("failed close dev/dsp"); exit(1); } return 0; } еще вопрос по поводу устройства /dev/dsp где можно узнать про флаги ( SOUND_PCM_WRITE_... ) да и вообще про сам dsp ? и еще почему в define записали BUFSIZE 8000*10, а не 80000? From sitkarev на komitex.ru Mon Feb 21 00:31:48 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 20 Feb 2011 23:31:48 +0300 Subject: [P&AM Lab] =?utf-8?b?0LfQsNC70LXQttCw0LLRiNC40LnRgdGPINC/0L7Qv9GD?= =?utf-8?b?0LPQsNC50YfQuNC6?= In-Reply-To: <468281912.1298224374.162944888.59370@mcgi43.rambler.ru> References: <468281912.1298224374.162944888.59370@mcgi43.rambler.ru> Message-ID: <4D617A34.8070007@komitex.ru> Приветствую. 20.02.2011 20:52, Илья Артеев пишет: > Григорий Александрович! сегодня наконец-то взялся и разобрался с > попугайчиком, но только у него не работает эквалайзер, почему-то он его > не выводит при проигровании семпла. а выкидывает только в конце. > это из-за того что stdout занят? > вот первоначальный исходник, только я в нем вставил цикл при записи из > буфера (write ( fd, p, n/100 ) ), чтобы читал по кускам ( по 400 байтов > для вывода эквалайзера после каждого прохода) Да, очень хорошо что начал что-то делать. Хотя честно говоря я не совсем понял в чём суть изменений, т.к. особо разницы не заметил, ну и ладно. Тебе нужно разобраться почему перестал работать эквалайзер -- stdout ничем не занят, можно в него писать. > еще вопрос по поводу устройства /dev/dsp где можно узнать про флаги ( > SOUND_PCM_WRITE_... ) да и вообще про сам dsp ? Это классическая для многих версий UNIX звуковая подсистема OSS API. Документация по API есть на сайте OpenSound: http://manuals.opensound.com/developer/ > и еще почему в define записали BUFSIZE 8000*10, а не 80000? Это было сделано для ясности. Т.к. мы выставляем частоту семплирования в 8 KHz (когда делаем ioctl с SOUND_PCM_[READ|WRITE]_RATE), здесь сразу видно что размер буфера выбран так чтобы помещалось 10 секунд записи. Это константное выражение, оно будет компилятором преобразовано в 80000, так что лучше оставить как было. -- Г.А. From nateford на inbox.ru Mon Feb 21 19:13:59 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Mon, 21 Feb 2011 18:13:59 +0300 Subject: [P&AM Lab] =?koi8-r?b?2sHMxdbB19vJytPRINDP0NXHwcreycs=?= In-Reply-To: <468281912.1298224374.162944888.59370@mcgi43.rambler.ru> References: <468281912.1298224374.162944888.59370@mcgi43.rambler.ru> Message-ID: Илюх, сбрось файликом пожалуйста... From Lonely.RuyK на mail.ru Mon Feb 21 23:33:25 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Mon, 21 Feb 2011 22:33:25 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LjQvtGC0LXQutCwINCx0L7Qu9GM0YjQuNGF?= =?utf-8?b?INGH0LjRgdC10Ls=?= Message-ID: <201102212233.25450.Lonely.RuyK@mail.ru> Начал писать библиотеку больших чисел. Небольшие трудности возникают с определением того из чего она должна вообще состоять и какие функции должны в ней быть. Пока написал только сложение, планируется ещё вычитание, умножение, деление, остаток от деления. Нужно ли писать что-то ещё? есть ли смысл вводить отрицательные числа? Нужно ли писать функции так, что бы они сразу могли складывать разные по размеру числа? Исходник посылаю вместе с письмом (он пока несколько сырой, не успел дописать проверки для malloc и realloc). Заранее спасибо за ответы и советы:) ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: bignum.h Type: text/x-chdr Size: 739 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Tue Feb 22 00:08:32 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 21 Feb 2011 23:08:32 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LjQvtGC0LXQutCwINCx0L7Qu9GM0YjQuNGF?= =?utf-8?b?INGH0LjRgdC10Ls=?= In-Reply-To: <201102212233.25450.Lonely.RuyK@mail.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> Message-ID: <4D62C640.8080402@komitex.ru> Хорошее начало. > Начал писать библиотеку больших чисел. Небольшие трудности возникают с > определением того из чего она должна вообще состоять и какие функции должны в > ней быть. Пока написал только сложение, планируется ещё вычитание, умножение, > деление, остаток от деления. Библиотека это в первую очередь API -- т.е. интерфейс вызова, имена функций, их порядок в аргументах и возвращаемые значения. Для того чтобы API был хорошим нужно чтобы он был: а) целостным; б) непротиворечивым; в) простым для запоминания; г) соответствовал задачам библиотеки и ожиданиям пользователя; д) основывался на сложившихся традициях и идиомах (если таковые применимы и существуют в практике). Возможно, сначала стоит разобраться вообще -- зачем нужна такая библиотека? Что мы от неё хотим и как мы будем её использовать? Для этого нужно погрузиться на какое-то время в предметно-ориентированную область и изучить её, хотя бы поверхностно. На этом шаге мы должны чётко сформулировать, какие функции мы хотим получить от библиотеки. Их задача -- сделать сложные вещи простыми и дать возможность ими воспользоваться. Дальше разрабатывается API, т.е. интерфейс к этим функциям, их имена, порядок следования аргументов, публичные структуры, перечисления и т.д. Прототип будущей библиотеки. Возможно, в ходе реализации отдельных функций выяснится что что-то нужно скорректировать на любом из шагов, тогда задача выполняется ещё раз, от начала. Возможно, какой-то шаг пропускается. Жёсткого алгоритма конечно-же нет, это творчество. То что получилось на этом шаге -- выносится в заголовочный файл. > Нужно ли писать что-то ещё? есть ли смысл вводить > отрицательные числа? Нужно ли писать функции так, что бы они сразу могли > складывать разные по размеру числа? Можно сказать что такие функции точно понадобятся (и ещё будут другие): bnum_new() bnum_free() bnum_unset() bnum_reset() bnum_add() bnum_sub() bnum_mul() bnum_div() bnum_mod() bnum_gcd() bnum_exp() или bnum_pow() bnum_set() bnum_set_int() bnum_set_ascii() bnum_get_ascii() Что-то вроде... Надо подумать ещё конечно. Это очень важный шаг. Если например, я беру два положительных числа a и b, и при этом a < b, а потом вычитаю из (a - b), то результатом будет отрицательное число. Это ответ на вопрос об отрицательных числах. Такая арифметика будет полной. Для хранения знака тебе достаточно одного бита. Базу для чисел скорее всего лучше выбрать 65536 и тогда значения разрядов хранить в unsigned short. Числа bignum могут быть разного порядка, поэтому складывать и делать прочие операции нужно с числами разного размера. Поэтому придётся хранить поле где есть индекс разряда последнего использованного. Индекс удобнее потому что в таком случае он же будет являться и наибольшей степенью базы у числа. Например, 65535^0=1 если top равен 0. #define BNUM_BASE 65536 struct bignum { int sign; /* 1 = negative, 0 = positive */ int nalloc; /* allocated */ int top; /* last used */ unsigned short *val; /* BNUM_BASE digits */ }; Что-то вроде такого. Структуры должны передаваться по указателю а не по значению. Сейчас они у тебя копируются в стек. Должно быть что-то вроде: /* res = a + b */ int bnum_add(struct bignum *res, struct bignum *a, struct bignum *b); Боря, обрати внимание пожалуйста на стиль. У тебя с этим есть проблемы. Может быть у тебя какой-то редактор неправильный, не даёт тебе возможность писать удобно? -- Г.А. From rg-400 на list.ru Tue Feb 22 00:11:53 2011 From: rg-400 на list.ru (=?UTF-8?B?0JXQs9C+0YAg0J7QtNC40L3RhtC+0LI=?=) Date: Mon, 21 Feb 2011 23:11:53 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LjQvtGC0LXQutCwINCx0L7Qu9GM0YjQuNGF?= =?utf-8?b?INGH0LjRgdC10Ls=?= In-Reply-To: <201102212233.25450.Lonely.RuyK@mail.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> Message-ID: <4D62C709.8010004@list.ru> 21.02.2011 22:33, LonelyRuyK пишет: > Начал писать библиотеку больших чисел. Небольшие трудности возникают с > определением того из чего она должна вообще состоять и какие функции должны в > ней быть. Пока написал только сложение, планируется ещё вычитание, умножение, > деление, остаток от деления. Нужно ли писать что-то ещё? есть ли смысл вводить > отрицательные числа? Нужно ли писать функции так, что бы они сразу могли > складывать разные по размеру числа? Исходник посылаю вместе с письмом (он пока > несколько сырой, не успел дописать проверки для malloc и realloc). Ещё нужны функции создания числа, какая-нибудь функция заполнения. А то и проверить нельзя :). Копируй поведение стандартных типов. Создать число. Скопировать число. Сложить, умножить, разделить, вычесть, возвести в степень. Удалить и т.п. Числа естественно могут быть разными, и твоя реализация вряд ли будет с ними работать. И файл у тебя почему-то с расширением h. From sitkarev на komitex.ru Tue Feb 22 00:15:25 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 21 Feb 2011 23:15:25 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LjQvtGC0LXQutCwINCx0L7Qu9GM0YjQuNGF?= =?utf-8?b?INGH0LjRgdC10Ls=?= In-Reply-To: <4D62C709.8010004@list.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <4D62C709.8010004@list.ru> Message-ID: <4D62C7DD.5080204@komitex.ru> Мысли совпадают или синхронизируются? > Ещё нужны функции создания числа, какая-нибудь функция заполнения. А то > и проверить нельзя :). > Копируй поведение стандартных типов. > Создать число. > Скопировать число. > Сложить, умножить, разделить, вычесть, возвести в степень. > Удалить и т.п. > Числа естественно могут быть разными, и твоя реализация вряд ли будет с > ними работать. -- Г.А. From Lonely.RuyK на mail.ru Tue Feb 22 03:17:33 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Tue, 22 Feb 2011 02:17:33 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LjQvtGC0LXQutCwINCx0L7Qu9GM0YjQuNGF?= =?utf-8?b?INGH0LjRgdC10Ls=?= In-Reply-To: <4D62C7DD.5080204@komitex.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <4D62C709.8010004@list.ru> <4D62C7DD.5080204@komitex.ru> Message-ID: <201102220217.33913.Lonely.RuyK@mail.ru> Ясно, спасибо, теперь вроде бы понятнее с чего начинать стоит. Со стилем действительно проблемы, дело не в редакторе а в привычке, но пытаюсь исправиться. А вот вопрос по функциям возник : чем отличается функции unset и reset? Они обе ведь должны затирать число и выставлять все значения на 0? И ещё вопрос по структуре: зачем нужно поле nalloc? From sitkarev на komitex.ru Tue Feb 22 17:28:26 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 22 Feb 2011 16:28:26 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LjQvtGC0LXQutCwINCx0L7Qu9GM0YjQuNGF?= =?utf-8?b?INGH0LjRgdC10Ls=?= In-Reply-To: <201102220217.33913.Lonely.RuyK@mail.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <4D62C709.8010004@list.ru> <4D62C7DD.5080204@komitex.ru> <201102220217.33913.Lonely.RuyK@mail.ru> Message-ID: <4D63B9FA.1020700@komitex.ru> > А вот вопрос по функциям возник : чем отличается функции unset и > reset? Они обе ведь должны затирать число и выставлять все значения на 0? Смысл был такой что unset она сбрасывает значение но не высвобождает память, выделенную динамически для хранения val а reset освобождает память. > И ещё вопрос по структуре: зачем нужно поле nalloc? Там видимо должно быть количество (в штуках) элементов unsigned short выделенных динамически через malloc(). -- Г.А. From nateford на inbox.ru Tue Feb 22 19:28:33 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Tue, 22 Feb 2011 18:28:33 +0300 Subject: [P&AM Lab] =?koi8-r?b?8MXSxcTFzMHOztnKIMfFzsXSwdTP0iDQwdLPzMXK?= Message-ID: Я его переделал, вот код. Правда poll() вокруг open() еще не возвел, но это тоже будет скоро, когда пойму, как его возводить. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 4072 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Wed Feb 23 00:45:15 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Tue, 22 Feb 2011 23:45:15 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/QtdGA0LXQtNC10LvQsNC90L3Ri9C5INCz0LXQvdC1?= =?utf-8?b?0YDQsNGC0L7RgCDQv9Cw0YDQvtC70LXQuQ==?= In-Reply-To: References: Message-ID: <4D64205B.5060306@komitex.ru> С макросами что-то невообразимое намудрил. Есть такое правило -- макросы они были придуманы не для того чтобы изменять синтаксис языка. И уж конечно ни в коем случае макрос не должен делать return. Это только в одном единственном случае допустимо и то потому что есть некая традиция (при проверке валидности аргументов в начале вызова public функций). Функция select_char() однозначно должна быть перепроектирована. Есть ощущение что и интерфейс к другим функциям тоже нужно переделывать. Честно говоря, мне с первого раза не понятно было что и зачем. Куда-то опять пропали комментарии. Не понятно почему теперь MAX_LENGTH+2 стало. Было же 255 байтов для строки ещё плюс один байт для хранения нуль-терминатора. Оно конечно будет работать, то сейчас это всё стало неуклюжим каким-то. И можно сделать всё проще. C poll() всё достаточно просто: struct pollfd pfd; int res; pfd.fd = fileno(stdin); pfd.events = POLLIN; pfd.revents = 0; /* 5 seconds timeout. */ res = poll(&pfd, 1, 5000); if (res == 0) { printf("timeout\n"); } else if (res == -1) { if (errno == EINTR) printf("got signal\n"); else printf("error\n"); } else { /* We have data to read from stdin. */ } Проверишь на тестовой программе сначала, потом сообразишь как его включить в твой код. -- Г.А. 22.02.2011 18:28, Константин Никулов пишет: > Я его переделал, вот код. Правда poll() вокруг open() еще не возвел, но это тоже будет скоро, когда пойму, как его возводить. From nateford на inbox.ru Wed Feb 23 09:37:19 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Wed, 23 Feb 2011 08:37:19 +0300 Subject: [P&AM Lab] =?koi8-r?b?RndkOiBSZTogIPDF0sXExczBzs7ZyiDHxc7F0sHU?= =?koi8-r?b?z9Ig0MHSz8zFyg==?= Message-ID: Знаю, самому макросы не нравятся. Но без них читаться неудобно будет, а как по другому сделать, придумать не получается. Только через switch если, но там 94 раза case будет тогда, что громоздко и тоже не очень удобно. Интерфейс к другим функциям можно сильно упростить, если ввести short int flags[4] вместо отдельных пременных. Но тогда опять же понятность может пострадать. С MAX_LENGTH я запутался немного, если честно... Но этот вариант работал, поэтому я его оставил. Tue, 22 Feb 2011 23:45:15 +0300 письмо от "Grigoriy A. Sitkarev" : > С макросами что-то невообразимое намудрил. Есть такое правило -- макросы > они были придуманы не для того чтобы изменять синтаксис языка. И уж > конечно ни в коем случае макрос не должен делать return. Это только в > одном единственном случае допустимо и то потому что есть некая традиция > (при проверке валидности аргументов в начале вызова public функций). > > Функция select_char() однозначно должна быть перепроектирована. Есть > ощущение что и интерфейс к другим функциям тоже нужно переделывать. > Честно говоря, мне с первого раза не понятно было что и зачем. > > Куда-то опять пропали комментарии. > > Не понятно почему теперь MAX_LENGTH+2 стало. Было же 255 байтов для > строки ещё плюс один байт для хранения нуль-терминатора. Оно конечно > будет работать, то сейчас это всё стало неуклюжим каким-то. И можно > сделать всё проще. > > C poll() всё достаточно просто: > > struct pollfd pfd; > int res; > > pfd.fd = fileno(stdin); > pfd.events = POLLIN; > pfd.revents = 0; > > /* 5 seconds timeout. */ > res = poll(&pfd, 1, 5000); > > if (res == 0) { > printf("timeout\n"); > } else if (res == -1) { > if (errno == EINTR) > printf("got signal\n"); > else > printf("error\n"); > } else { > /* We have data to read from stdin. */ > } > > Проверишь на тестовой программе сначала, потом сообразишь как его > включить в твой код. > > -- > Г.А. > > 22.02.2011 18:28, Константин Никулов пишет: > > Я его переделал, вот код. Правда poll() вокруг open() еще не возвел, но это > тоже будет скоро, когда пойму, как его возводить. From rg-400 на list.ru Wed Feb 23 13:39:32 2011 From: rg-400 на list.ru (=?KOI8-R?Q?=E5=C7=CF=D2_=EF=C4=C9=CE=C3=CF=D7?=) Date: Wed, 23 Feb 2011 12:39:32 +0300 Subject: [P&AM Lab] =?koi8-r?b?RndkOiBSZTog8MXSxcTFzMHOztnKIMfFzsXSwdTP?= =?koi8-r?b?0iDQwdLPzMXK?= In-Reply-To: References: Message-ID: <4D64D5D4.5030903@list.ru> Без макросов будет проще читаться. Проще сделать массив, в котором лежат символы, из которых будет составляться пароль. Памяти уйдет минимум. (26 + 10 байт + дополнительные символы если нужно) Случайный символ будет выбираться по индексу. Можно заранее исключить не нужные символы или включить. Интерфейс к другим функциям можно сильно упростить, если ввести short int flags[4] вместо отдельных пременных. Почитай рассылку с этого поста http://wiki.syktsu.ru/pipermail/lab/2010-December/000021.html. Там про удобный способ хранить опции. From sitkarev на komitex.ru Wed Feb 23 18:36:05 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Wed, 23 Feb 2011 17:36:05 +0300 Subject: [P&AM Lab] =?utf-8?b?RndkOiBSZTog0J/QtdGA0LXQtNC10LvQsNC90L3Ri9C5?= =?utf-8?b?INCz0LXQvdC10YDQsNGC0L7RgCDQv9Cw0YDQvtC70LXQuQ==?= In-Reply-To: <4D64D5D4.5030903@list.ru> References: <4D64D5D4.5030903@list.ru> Message-ID: <4D651B55.4010803@komitex.ru> > Проще сделать массив, в котором лежат символы, из которых будет > составляться пароль. > Памяти уйдет минимум. (26 + 10 байт + дополнительные символы если нужно) > Случайный символ будет выбираться по индексу. Можно заранее исключить не > нужные > символы или включить. Дельный вариант. Случайное число служит лишь для выбора индекса в массив допустимых символов ASCII. Так и следует сделать. Табличные алгоритмы всегда проще читаются и модифицируются. Я на следующем занятии расскажу про них пожалуй. -- Г.А. From nateford на inbox.ru Wed Feb 23 20:30:24 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Wed, 23 Feb 2011 19:30:24 +0300 Subject: [P&AM Lab] =?koi8-r?b?8MXSxcTFzMHOztnKIMfFzsXSwdTP0iDQwdLPzMXK?= In-Reply-To: <4D651B55.4010803@komitex.ru> References: <4D64D5D4.5030903@list.ru> <4D651B55.4010803@komitex.ru> Message-ID: Идею уловил, но не понимаю, как это можно сделать просто, потому что в таблице специальные символы не по порядку идут, и я не вижу простого способа заполнить ими массив. А если делать без них, вариант с условиями значительно сокращается. Будет очень интересно послушать. У меня хорошая новость, в субботу нас станет на 1 человека больше :) From sitkarev на komitex.ru Wed Feb 23 20:35:54 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Wed, 23 Feb 2011 19:35:54 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/QtdGA0LXQtNC10LvQsNC90L3Ri9C5INCz0LXQvdC1?= =?utf-8?b?0YDQsNGC0L7RgCDQv9Cw0YDQvtC70LXQuQ==?= In-Reply-To: References: <4D64D5D4.5030903@list.ru> <4D651B55.4010803@komitex.ru> Message-ID: <4D65376A.5080604@komitex.ru> Простой способ заполнить массив -- сделать этот массив самому. static char symbol_list[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' }; Вот тебе массив из восьми ASCII-символов. Можешь вставлять туда сколько тебе нужно элементов. Думаю что принцип ясен. > У меня хорошая новость, в субботу нас станет на 1 человека больше :) Кто-то рожает??? o_O -- Г.А. From nateford на inbox.ru Wed Feb 23 20:49:54 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Wed, 23 Feb 2011 19:49:54 +0300 Subject: [P&AM Lab] =?koi8-r?b?8MXSxcTFzMHOztnKIMfFzsXSwdTP0iDQwdLPzMXK?= In-Reply-To: <4D65376A.5080604@komitex.ru> References: <4D65376A.5080604@komitex.ru> Message-ID: А, идея ясна. Потом, очевидно, в зависимости от флагов заполняем этими массивами один большой массив, а оттуда уже выцепляем символы... Надо попробовать будет, интересный вариант. Нет, всего лишь удалось заинтересовать человека нашими занятиями. From sitkarev на komitex.ru Wed Feb 23 20:53:34 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Wed, 23 Feb 2011 19:53:34 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/QtdGA0LXQtNC10LvQsNC90L3Ri9C5INCz0LXQvdC1?= =?utf-8?b?0YDQsNGC0L7RgCDQv9Cw0YDQvtC70LXQuQ==?= In-Reply-To: References: <4D65376A.5080604@komitex.ru> Message-ID: <4D653B8E.2090502@komitex.ru> 23.02.2011 19:49, Константин Никулов пишет: > А, идея ясна. Потом, очевидно, в зависимости от флагов заполняем этими массивами один большой массив, а оттуда уже выцепляем символы... Надо попробовать будет, интересный вариант. Да, есть и вариант и делать lookup-ы в нескольких массивах таких, в зависимости от того какие флаги. Попробуй разные варианты продумать, какой лучше и проще будет тот и делай. > Нет, всего лишь удалось заинтересовать человека нашими занятиями. В связи с этим есть предложение формировать группу начинающих изучать программирование. Потому что новых людей набралось, где-то человек 5 наверное даже. Им нужно послушать меня с начала, а потом быстрее догонять вас. -- Г.А. From rg-400 на list.ru Wed Feb 23 21:01:40 2011 From: rg-400 на list.ru (=?KOI8-R?Q?=E5=C7=CF=D2_=EF=C4=C9=CE=C3=CF=D7?=) Date: Wed, 23 Feb 2011 20:01:40 +0300 Subject: [P&AM Lab] =?koi8-r?b?8MXSxcTFzMHOztnKIMfFzsXSwdTP0iDQwdLPzMXK?= In-Reply-To: <4D653B8E.2090502@komitex.ru> References: <4D65376A.5080604@komitex.ru> <4D653B8E.2090502@komitex.ru> Message-ID: <4D653D74.3040001@list.ru> Можно выкинут специальные символы. Для пароля хватит a-z,A-Z,0-9 или добавить опцию, за которой будут идти дополнительные символы, которые могут присутствовать в пароле. Если только a-z,A-Z,0-9, можно заполнить его вручную. И исключение чисел из набора будет изменение переменной, в которой будем хранить длину массива, а исключение букв изменения указателя на первый элемент и его длину. пример int len; char *sl; len = sizeof(symbol_list) / sizeof(symbol_list[0]); if (pw_opt & NO_NUM) len -= 10; sl = symbol_list; if (pw_opt & NO_ABC) { sl +=26 * 2; len -=26 * 2; } Еще добавить для uppercase и lowercase Если использовать доп. символы, то тут уже нужен динамический массив. Здесь проблема, как сделать пароль удобным для запоминания человеком. Буквы будут ,кстати, чаще встречаться, чем цифры, т.к. их больше. From nateford на inbox.ru Wed Feb 23 23:14:06 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Wed, 23 Feb 2011 22:14:06 +0300 Subject: [P&AM Lab] =?koi8-r?b?8MXSxcTFzMHOztnKIMfFzsXSwdTP0iDQwdLPzMXK?= In-Reply-To: <4D653D74.3040001@list.ru> References: <4D653B8E.2090502@komitex.ru> <4D653D74.3040001@list.ru> Message-ID: Необходимость сложностей с исключением знаков кажется мне столь же сомнительной, как и вобще присутствие специальных символов :) Как сделать пароль удобным для запоминания - то да, проблема, поскольку надо для начала уточнять понятие "удобный для запоминания". Ну, я думаю то, что буквы встречаются чаще - то не беда. Важно то, что вероятности появления всех знаков из любого из возможных у нас алфавитов одинаковы. Посылаю результат сегодняшних трудов. Функцию select_char() решил пока что не трогать, т.к. все еще не вижу смысла ее переделывать. Гораздо больше интересно, правильна ли сделана штука с poll(). Wed, 23 Feb 2011 20:01:40 +0300 письмо от Егор Одинцов : > Можно выкинут специальные символы. > Для пароля хватит a-z,A-Z,0-9 или добавить опцию, за которой будут идти > дополнительные символы, которые могут присутствовать в пароле. > > Если только a-z,A-Z,0-9, можно заполнить его вручную. > > И исключение чисел из набора будет изменение переменной, в которой будем > хранить длину массива, а исключение букв изменения указателя на первый > элемент и его длину. > > пример > int len; > char *sl; > > len = sizeof(symbol_list) / sizeof(symbol_list[0]); > > if (pw_opt & NO_NUM) > len -= 10; > > sl = symbol_list; > > if (pw_opt & NO_ABC) { > sl +=26 * 2; > len -=26 * 2; > } > > Еще добавить для uppercase и lowercase > > Если использовать доп. символы, то тут уже нужен динамический массив. > > Здесь проблема, как сделать пароль удобным для запоминания человеком. > Буквы будут ,кстати, чаще встречаться, чем цифры, т.к. их больше. > > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 5857 bytes Desc: отсутствует URL: From nateford на inbox.ru Thu Feb 24 01:00:59 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Thu, 24 Feb 2011 00:00:59 +0300 Subject: [P&AM Lab] =?koi8-r?b?8MXSxcTFzMHOztnKIMfFzsXSwdTP0iDQwdLPzMXK?= In-Reply-To: <4D653D74.3040001@list.ru> References: <4D653B8E.2090502@komitex.ru> <4D653D74.3040001@list.ru> Message-ID: В общем, реализовал я вариант с массивами. Не сказал бы, что он сильно проще... Скидываю его с письмом. Wed, 23 Feb 2011 20:01:40 +0300 письмо от Егор Одинцов : > Можно выкинут специальные символы. > Для пароля хватит a-z,A-Z,0-9 или добавить опцию, за которой будут идти > дополнительные символы, которые могут присутствовать в пароле. > > Если только a-z,A-Z,0-9, можно заполнить его вручную. > > И исключение чисел из набора будет изменение переменной, в которой будем > хранить длину массива, а исключение букв изменения указателя на первый > элемент и его длину. > > пример > int len; > char *sl; > > len = sizeof(symbol_list) / sizeof(symbol_list[0]); > > if (pw_opt & NO_NUM) > len -= 10; > > sl = symbol_list; > > if (pw_opt & NO_ABC) { > sl +=26 * 2; > len -=26 * 2; > } > > Еще добавить для uppercase и lowercase > > Если использовать доп. символы, то тут уже нужен динамический массив. > > Здесь проблема, как сделать пароль удобным для запоминания человеком. > Буквы будут ,кстати, чаще встречаться, чем цифры, т.к. их больше. > > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 5665 bytes Desc: отсутствует URL: From Lonely.RuyK на mail.ru Thu Feb 24 02:23:56 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Thu, 24 Feb 2011 01:23:56 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LjQvtGC0LXQutCwINCx0L7Qu9GM0YjQuNGF?= =?utf-8?b?INGH0LjRgdC10Ls=?= In-Reply-To: <4D62C709.8010004@list.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <4D62C709.8010004@list.ru> Message-ID: <201102240123.56433.Lonely.RuyK@mail.ru> Попытался переделать всё что в прошлый раз понаписал. Не знаю правда на сколько хорошо или плохо получилось. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: bnum_add.c Type: text/x-csrc Size: 1873 bytes Desc: отсутствует URL: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: bignum_main.c Type: text/x-csrc Size: 1971 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Thu Feb 24 03:12:08 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Thu, 24 Feb 2011 02:12:08 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/QtdGA0LXQtNC10LvQsNC90L3Ri9C5INCz0LXQvdC1?= =?utf-8?b?0YDQsNGC0L7RgCDQv9Cw0YDQvtC70LXQuQ==?= In-Reply-To: References: <4D653B8E.2090502@komitex.ru> <4D653D74.3040001@list.ru> Message-ID: <4D659448.5070900@komitex.ru> По поводу массивов, такая задача в программировании возникает довольно часто. Точнее, целый класс таких задач встречается на практике, не обязательно связан с символами, но когда мы так или иначе работаем с каким-то набором данных где должны что-то выбирать, включать или выключать и т.д. Хотел я сначала долго объяснять, потом подумал что лучше напишу и на примере будет понятно что я хотел донести. Лучше один раз увидеть чем что раз услышать. Так что смотрите мой вариант, как бы сделал эту задачу я. Исходник компилируемый, запускаете и смотрите что он рисует. Думаю что принцип должен быть ясен. -- Г.А. 24.02.2011 00:00, Константин Никулов пишет: > В общем, реализовал я вариант с массивами. Не сказал бы, что он сильно проще... Скидываю его с письмом. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: alphabet.c Type: text/x-csrc Size: 2021 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Thu Feb 24 03:30:10 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Thu, 24 Feb 2011 02:30:10 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/QtdGA0LXQtNC10LvQsNC90L3Ri9C5INCz0LXQvdC1?= =?utf-8?b?0YDQsNGC0L7RgCDQv9Cw0YDQvtC70LXQuQ==?= In-Reply-To: <4D659448.5070900@komitex.ru> References: <4D653B8E.2090502@komitex.ru> <4D653D74.3040001@list.ru> <4D659448.5070900@komitex.ru> Message-ID: <4D659882.4070605@komitex.ru> Там может быть немного сложный пример, но это вроде тестирования. Смысл такой, вы вызываете функцию gen_alphabet(), указывая какое подмножество из набора ASCII включать в набор: int res, n, flags; char *str; flags = ALPHA_DIGITS | ALPHA_LOWER | ALPHA_UPPER; res = gen_alphabet(&str, &n, flags); if (res == -1) { /* error */ ... } ... free(str); Она вам сгенерирует этот набор и поместит в str. Вы его должны потом высвободить через free(3). Количество символов помещается в n, если указатель на него был передан, там может быть и NULL. Строка str терминируется нулём, так что её можно использовать и как массив из char и как строку. Это всё так простенько теперь можно пользовать из ваших функций. -- Г.А. 24.02.2011 02:12, Grigoriy A. Sitkarev пишет: > > Так что смотрите мой вариант, как бы сделал эту задачу я. Исходник > компилируемый, запускаете и смотрите что он рисует. Думаю что принцип > должен быть ясен. > From sitkarev на komitex.ru Thu Feb 24 05:13:58 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Thu, 24 Feb 2011 04:13:58 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/QtdGA0LXQtNC10LvQsNC90L3Ri9C5INCz0LXQvdC1?= =?utf-8?b?0YDQsNGC0L7RgCDQv9Cw0YDQvtC70LXQuQ==?= In-Reply-To: <4D659882.4070605@komitex.ru> References: <4D653B8E.2090502@komitex.ru> <4D653D74.3040001@list.ru> <4D659448.5070900@komitex.ru> <4D659882.4070605@komitex.ru> Message-ID: <4D65B0D6.6040503@komitex.ru> Косметические изменения в alphabet.c, всё таки переименовал префикс в ASCII_* и принято считать все не числа, не пробелы и не буквы знаками пунктуации, так что теперь они ASCII_PUNCT вместо ALPH_SPECIAL. Ещё поправил освобождение памяти, в случае если realloc(3) свалился, и пометил массивы как const. Для порядку. Накладывайте патч прямо в каталоге с alphabet.c так: $ patch -p0 < alphabet.diff -- Г.А. 24.02.2011 02:30, Grigoriy A. Sitkarev пишет: > Там может быть немного сложный пример, но это вроде тестирования. > > Смысл такой, вы вызываете функцию gen_alphabet(), указывая какое > подмножество из набора ASCII включать в набор: ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: alphabet.diff Type: text/x-patch Size: 2200 bytes Desc: отсутствует URL: From nateford на inbox.ru Thu Feb 24 12:19:44 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Thu, 24 Feb 2011 11:19:44 +0300 Subject: [P&AM Lab] =?koi8-r?b?8MXSxcTFzMHOztnKIMfFzsXSwdTP0iDQwdLPzMXK?= In-Reply-To: <4D65B0D6.6040503@komitex.ru> References: <4D659882.4070605@komitex.ru> <4D65B0D6.6040503@komitex.ru> Message-ID: Вроде бы разобрался, зачем это нужно и как это работает. Вот результат. ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: отсутствует Type: application/octet-stream Size: 5685 bytes Desc: отсутствует URL: From rg-400 на list.ru Thu Feb 24 12:55:16 2011 From: rg-400 на list.ru (=?KOI8-R?Q?=E5=C7=CF=D2_=EF=C4=C9=CE=C3=CF=D7?=) Date: Thu, 24 Feb 2011 11:55:16 +0300 Subject: [P&AM Lab] =?koi8-r?b?8MXSxcTFzMHOztnKIMfFzsXSwdTP0iDQwdLPzMXK?= In-Reply-To: References: <4D659882.4070605@komitex.ru> <4D65B0D6.6040503@komitex.ru> Message-ID: <4D661CF4.3050602@list.ru> 24.02.2011 11:19, Константин Никулов пишет: > Вроде бы разобрался, зачем это нужно и как это работает. Вот результат. > > > _______________________________________________ > Lab mailing list > Lab на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/lab &flag != NULL всегда будет истина. И может убрать realloc из функции. void init_alphabet(short int flag, char *alphabet, int *splitter) И передавать туда заранее заготовленный массив из 256 символов, т.к. больше их быть не может. From rg-400 на list.ru Thu Feb 24 19:34:50 2011 From: rg-400 на list.ru (=?UTF-8?B?0JXQs9C+0YAg0J7QtNC40L3RhtC+0LI=?=) Date: Thu, 24 Feb 2011 18:34:50 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LjQvtGC0LXQutCwINCx0L7Qu9GM0YjQuNGF?= =?utf-8?b?INGH0LjRgdC10Ls=?= In-Reply-To: <201102240123.56433.Lonely.RuyK@mail.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <4D62C709.8010004@list.ru> <201102240123.56433.Lonely.RuyK@mail.ru> Message-ID: <4D667A9A.1040104@list.ru> 24.02.2011 01:23, LonelyRuyK пишет: > for ( i = 0; i<= pb->top; i++) { > res->val[i] = ( tail + pa->val[i] + pb->val[i]) % BASE; // sum p > tail = ( tail + pa->val[i] + pb->val[i]) / BASE; > } res->val[i] = ( tail + pa->val[i] + pb->val[i]) % BASE; Здесь % BASE не нужен вроде, т.к. он и так не выйдет за пределы 0..BASE-1 tail = ( tail + pa->val[i] + pb->val[i]) / BASE Только тут нужно помнить про приведение типа. И если захотеть изменить тип массива val на unsigned int, а базу поставить 2^32 можно получать tail = 0 всегда. А если у тебя два числа a и b, то можно определить переполнение с помощью следующего условия: res = a + b; if (a > res) || (b > res) tail = 1; else tail = 0; Т.к. сумма при переполнении будет меньше чем любое из чисел. From sitkarev на komitex.ru Fri Feb 25 10:36:49 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Fri, 25 Feb 2011 09:36:49 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LvQuNC+0YLQtdC60LAg0LHQvtC70YzRiNC4?= =?utf-8?b?0YUg0YfQuNGB0LXQuw==?= In-Reply-To: <201102240123.56433.Lonely.RuyK@mail.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <4D62C709.8010004@list.ru> <201102240123.56433.Lonely.RuyK@mail.ru> Message-ID: <4D674E01.2000103@komitex.ru> 24.02.2011 01:23, LonelyRuyK пишет: > Попытался переделать всё что в прошлый раз понаписал. Не знаю правда на > сколько хорошо или плохо получилось. Боря, дело не в том что хорошо или плохо. Дело совсем в другом. Я в субботу вам про это расскажу. Миша сделал для нас ветку на репозитории. http://wiki.syktsu.ru/websvn/listing.php?repname=libbignum&path=%2F&sc=0 Проект мы назвали libbignum, я туда добавил свой вариант. Посмотрите его внимательно, поиграйтесь с ним, наверняка там ошибки есть где-то. В файле test.c лежат примеры. Твой вариант пока что оставим для истории. Учётную запись Миша сделает если кто-то кроме Бори захочет ещё туда коммитить. Забирать дерево исходников конечно же могут все. Инструкция по работе с SVN краткая (кто собирается коммитить): http://wiki.syktsu.ru/websvn/filedetails.php?repname=aoscill&path=%2Finstruction.txt Кто хочет просто стянуть дерево исходников: $ svn co http://wiki.syktsu.ru/svn/libbignum Короче говоря, есть предложение такой проект исследовательский реализовать в рамках лаборатории. По запуску test или если кто-то свой бинарник будет собирать, т.к. библиотека разделяемая собирается в каталоге и ни в /lib ни в /usr/lib мы её не копируем, то нужно линковщику динамическому указать чтобы он делал поиск в текущем каталоге: $ LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./test -- Г.А. From sitkarev на komitex.ru Fri Feb 25 19:30:52 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Fri, 25 Feb 2011 18:30:52 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/Qu9Cw0L0g0L3QsCAyNi3QtSDRhNC10LLRgNCw0Ls=?= =?utf-8?b?0Y8=?= Message-ID: <4D67CB2C.2020205@komitex.ru> Приветствую всех. Виктор Рубинович выздоровел, так что в субботу он обязательно будет. У нас образовалась группа начинающих, где-то примерно 4-е человека. Поэтому делимся на две части, с начинающими мы найдём аудиторию и я расскажу про то как на Си программы писать. С остальными сети, после можно будет объединиться снова. Завтра Виктор Рубинович задумал вам про следующее рассказать: *TCP и UDP* - UDP - TCP - структура пакета TCP - формат TCP заголовка - флаги TCP - открытие TCP соединения (тройное рукопожатие) - закрытие соединения TCP - практическая работа с tcpdump - состояние соединения TCP - ICMP типы сообщений Ждём всех завтра в 15.30 в 425-й аудитории. -- Г.А. From sitkarev на komitex.ru Fri Feb 25 19:36:12 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Fri, 25 Feb 2011 18:36:12 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/Qu9Cw0L0g0L3QsCAyNi3QtSDRhNC10LLRgNCw0Ls=?= =?utf-8?b?0Y8=?= In-Reply-To: <4D67CB2C.2020205@komitex.ru> References: <4D67CB2C.2020205@komitex.ru> Message-ID: <4D67CC6C.20903@komitex.ru> Я забыл сказать кое-что. Завтра в 9.40 у 145-й группы я занятие провожу и собираюсь доступно рассказать о том что такое преобразование Фурье (дискретное в частности). Если кому-то будет интересно, подходите в 516-ю аудиторию. Место там есть. -- Г.А. 25.02.2011 18:30, Grigoriy A. Sitkarev пишет: > Приветствую всех. > > Виктор Рубинович выздоровел, так что в субботу он обязательно будет. From nateford на inbox.ru Sun Feb 27 18:10:29 2011 From: nateford на inbox.ru (=?koi8-r?Q?=EB=CF=CE=D3=D4=C1=CE=D4=C9=CE_=EE=C9=CB=D5=CC=CF=D7?=) Date: Sun, 27 Feb 2011 17:10:29 +0300 Subject: [P&AM Lab] =?koi8-r?b?8NLP18XSy8Eg09fR2sku?= In-Reply-To: <4D67CC6C.20903@komitex.ru> References: <4D67CB2C.2020205@komitex.ru> <4D67CC6C.20903@komitex.ru> Message-ID: Сайт сыктгу переехал, на новом не отыскать ссылку на рассылку (пардон за каламбур). А она нужна. From sitkarev на komitex.ru Sun Feb 27 18:54:01 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 27 Feb 2011 17:54:01 +0300 Subject: [P&AM Lab] =?utf-8?b?0J/RgNC+0LLQtdGA0LrQsCDRgdCy0Y/Qt9C4Lg==?= In-Reply-To: References: <4D67CB2C.2020205@komitex.ru> <4D67CC6C.20903@komitex.ru> Message-ID: <4D6A6589.4090105@komitex.ru> А у меня почему-то всё работает. http://wiki.syktsu.ru/listinfo/ Может не туда заходите? -- Г.А. 27.02.2011 17:10, Константин Никулов пишет: > Сайт сыктгу переехал, на новом не отыскать ссылку на рассылку (пардон за каламбур). А она нужна. From Lonely.RuyK на mail.ru Mon Feb 28 00:44:46 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Sun, 27 Feb 2011 23:44:46 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LvQuNC+0YLQtdC60LAg0LHQvtC70YzRiNC4?= =?utf-8?b?0YUg0YfQuNGB0LXQuw==?= In-Reply-To: <4D674E01.2000103@komitex.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <201102240123.56433.Lonely.RuyK@mail.ru> <4D674E01.2000103@komitex.ru> Message-ID: <201102272344.46589.Lonely.RuyK@mail.ru> Внёс небольшие изменения в файлики cmp.c и init.c. Надеюсь ничего не испортил:) Изменения вызваны тем что в init.c в функции bnum_set не совсем правильно рассчитывалась переменная bn->top ( в случае когда передавался массив с нулями вначале, top и их считал) А в файле cmp.c было несколько не нужных строчек. Григорий Александрович, а можно ли как то оставлять комментарии к изменениям в ревизии? From sitkarev на komitex.ru Mon Feb 28 01:15:43 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 28 Feb 2011 00:15:43 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LvQuNC+0YLQtdC60LAg0LHQvtC70YzRiNC4?= =?utf-8?b?0YUg0YfQuNGB0LXQuw==?= In-Reply-To: <201102272344.46589.Lonely.RuyK@mail.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <201102240123.56433.Lonely.RuyK@mail.ru> <4D674E01.2000103@komitex.ru> <201102272344.46589.Lonely.RuyK@mail.ru> Message-ID: <4D6ABEFF.9010007@komitex.ru> Всё хорошо, и перестановка во втором условии в bnum_cmp() действительно не нужна т.к. там однозначно порядок одинаковый (мы это проверили выше). Но в init.c пожалуй изменять не стоило т.к. пользователь который вызывает bnum_init() обязан чётко дать количество разрядов которые следует поместить в значение. Причём, ДАЖЕ если это нулевые разряды никакой проверки там быть не должно. Если они туда попадут это проблема пользователя. В bnum_init() не должно быть политики проверки что в этих разрядах лежит, если пользователю хочется их положить значит так нужно. > Григорий Александрович, а можно ли как то оставлять комментарии к изменениям в > ревизии? По-моему, у тебя как раз получается их оставлять при коммите. Только они должны быть на английском языке. Как и всё что в этом проекте. Боря, обрати пожалуйста внимание не стиль. НЕЛЬЗЯ скобки ставить так: if ( a > b) должно быть: if (a > b) Может быть тебе стоит почитать LKCS http://www.kernel.org/doc/Documentation/CodingStyle. -- Г.А. 27.02.2011 23:44, LonelyRuyK пишет: > Внёс небольшие изменения в файлики cmp.c и init.c. Надеюсь ничего не > испортил:) Изменения вызваны тем что в init.c в функции bnum_set не совсем > правильно рассчитывалась переменная bn->top ( в случае когда передавался > массив с нулями вначале, top и их считал) > А в файле cmp.c было несколько не нужных строчек. From Lonely.RuyK на mail.ru Mon Feb 28 11:26:28 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Mon, 28 Feb 2011 10:26:28 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LvQuNC+0YLQtdC60LAg0LHQvtC70YzRiNC4?= =?utf-8?b?0YUg0YfQuNGB0LXQuw==?= In-Reply-To: <4D6ABEFF.9010007@komitex.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <201102272344.46589.Lonely.RuyK@mail.ru> <4D6ABEFF.9010007@komitex.ru> Message-ID: <201102281026.29025.Lonely.RuyK@mail.ru> Спасибо, почитаю. А вот ещё уточнение по init.с: если оставить так как было то функция cmp будет неправильные результаты выводить( изза того что сначала в ней проверяется a->top а уже потом сами значения). Стоит ли тогда переписывать эту функцию? From sitkarev на komitex.ru Mon Feb 28 19:35:48 2011 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Mon, 28 Feb 2011 18:35:48 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LvQuNC+0YLQtdC60LAg0LHQvtC70YzRiNC4?= =?utf-8?b?0YUg0YfQuNGB0LXQuw==?= In-Reply-To: <201102281026.29025.Lonely.RuyK@mail.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <201102272344.46589.Lonely.RuyK@mail.ru> <4D6ABEFF.9010007@komitex.ru> <201102281026.29025.Lonely.RuyK@mail.ru> Message-ID: <4D6BC0D4.4010905@komitex.ru> Боря, вот такие соображения. В функции bnum_set() устанавливается значение поля top на индекс последнего разряда, переданного в параметрах пользователем. По соглашению, пользователь обязан передавать туда валидное значение, т.е. без ведущих нулей. Порядок разрядов в массиве соответствует степеням основания, что в общем соответствует логике нашей библиотеки. Т.е. если мы хотим засунуть туда положим число 0xabcd0102 то мы располагаем массив так: unsigned short digits[] = { 0x0102, 0xabcd }; Если очень хочется сделать функцию с проверкой на валидность, тогда нужно делать функцию bnum_set_safe() которая проверяет указатель на массив, убирает ведущие нули и если что-то пошло не так, то устанавливает значение bignum в 0. Или я что-то не понимаю? -- Г.А. 28.02.2011 10:26, LonelyRuyK пишет: > Спасибо, почитаю. А вот ещё уточнение по init.с: если оставить так как было то > функция cmp будет неправильные результаты выводить( изза того что сначала в > ней проверяется a->top а уже потом сами значения). Стоит ли тогда переписывать > эту функцию? From Lonely.RuyK на mail.ru Mon Feb 28 23:49:15 2011 From: Lonely.RuyK на mail.ru (LonelyRuyK) Date: Mon, 28 Feb 2011 22:49:15 +0300 Subject: [P&AM Lab] =?utf-8?b?0JHQuNCx0LvQuNC+0YLQtdC60LAg0LHQvtC70YzRiNC4?= =?utf-8?b?0YUg0YfQuNGB0LXQuw==?= In-Reply-To: <4D6BC0D4.4010905@komitex.ru> References: <201102212233.25450.Lonely.RuyK@mail.ru> <201102281026.29025.Lonely.RuyK@mail.ru> <4D6BC0D4.4010905@komitex.ru> Message-ID: <201102282249.15280.Lonely.RuyK@mail.ru> Нет, просто смутила ситуация с cmp, а о дополнительной функции я как-то не подумал. Сейчас переделаю :)