[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