[cdev] Утилита ps
Grigoriy A. Sitkarev
sitkarev на komitex.ru
Чт Мар 18 23:17:04 MSK 2010
Стас и Ксюша,
я вижу что вы что-то пытаетесь написать, но у вас тут почему-то очень
много кода который к ps никакого отношения не имеет. Это помоему реликт
вашей предыдущей работы - вы тренировались сделать простой вариант ls(1).
Если я правильно понимаю, то ваши усилия это пока тренировка, проба сил
так сказать, после чего вы начнёте уже делать то что по спецификации.
Просматривая ваш код я заметил следующее:
1. Чтобы проверить является ли каталог числом, можно поступить гораздо
проще чем у вас. Ваша функция (очевидно, повзаимствованная и я даже знаю
у кого) numericproc очень громоздка для своей задачи. На вскидку есть
два варианта как её решить (гораздо проще).
int
dir_is_proc(const char *dname)
{
if (dname == NULL || *dname == 0)
return 0;
while (isdigit(*dname))
++dname;
return (*dname == 0);
}
Здесь isdigit(3) можно заменить на:
while (*dname >= '0' && *dname <= '9')
Есть также вариант с использованием функции strtoul(3). С её помощью вы
можете и проверить что каталог - число, и сразу же сконвертировать в
номер процесса:
pid_t
get_pid_from_dir(const char *dname)
{
pid_t res;
char *endp;
if (dname == NULL || *dname == 0)
return -1;
res = strtoul(dname, &endp, 10);
return (*endp == 0 ? res : -1);
}
(Все эти функции проверите)
2. У вас не правильно выделяется память. Вы это делаете так:
char *ss = malloc(*ss);
И допускаете две ошибки. Во-первых, не проверяете, что вернул malloc(3),
во-вторых, *ss переданное в malloc будет мусором - первым байтом
массива, который никуда не указывает. Вам там нужен размер в байтах. Так
что уже когда вы читаете через fread(3) у вас уже память попорчена. Вам
надо просто сделать статический буфер и читать туда, на мой взгляд
выделять память динамически не нужно.
Обратите внимание что ниже точно такая же ошибка.
3. Нигде не проверяете что вернули вам вызовы, например fopen(3) но я
надеюсь что это вы пока только экспериментируете, и исправите, напишете
обработчик и т.д.
Продолжайте трудиться.
--
Г.А.
Malkov Stanislav пишет:
> Здравствуйте.
>
> Отправляем код ps на данный момент.
>
> --
> Кимаск К., Малков С.
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> cdev mailing list
> cdev на wiki.syktsu.ru
> http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev
Подробная информация о списке рассылки cdev