Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112

Поиск процессов (procchild)

29.03.2012, 19:15. Показов 1283. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Помогите пожалуйста с программой.
Запускаю но выдает ошибки.
Заранее Спасибо

Вот Задание:

Создать программу procchild на языке C, предназначенную для поиска процессов,
являющимися непосредственными потомками указанного процесса.
Синтаксис запуска программы:
procchild [-z | -r ] PID
где PID – номер родительского процесса. -z – ключ, указывающий, что выводить
следует информацию только о процессах-зомби. -r – ключ, указывающий, что
выводить следует информацию только о активных процессах.
Считать, что файловая система proc смонтирована в каталоге /proc. Если
какой-либо элемент proc недоступен, то его следует игнорировать.
Для каждого найденного процесса следует вывести его идентификатор, иден-
тификатор (и имя) реального пользователя, запустившего процесс, имя исполняе-
мого файла и текущий каталог процесса.
Сборка проекта должна проводиться под управлениемmake, причемMakefile
должен обеспечивать возможность выбора компилятора и его параметров. По
умолчанию параметры компилятора должны вызывать вывод всех предупре-
ждений при компиляции исходных файлов. Цель по умолчанию должна назы-
ваться “all”, и ее построение должно приводить к созданиювсехфайлов, необходи-
мых для реализации проекта. Цель “clean” должна применяться для удаления
всех файлов, созданных в процессе построения проекта.Желательно также нали-
чие целей “tags” для построения файла тегов, “install” для установки выходных
файлов проекта и test для проверки работоспособности программы.
Функцияmain должна располагаться в отдельномфайле, и заниматься только
разбором аргументов командной строки (рекомендуется использованиеgetopt ), для
реальной работы вызывая функции, находящиеся в других файлах. Допустимо в
одном файле с функцией “main” существование функций для вывода справочной
информации и версии программы.
Помимо опций, необходимых для работы программы, программа должна принимать опции: -V – вывод названия, версии, автора и авторских прав, -h – вывод
краткой справки о программе и способах ее запуска.Программа должна быть снаб-
жена комментариями, отражающими ход ее работы, и документацией в одном из
форматов: HTML, LATEX.
Работоспособность программыследует проверить на исчерпывающих тестовых
примерах.

Вот Листинг:
1------
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <errno.h>
 
 
int main(int argc, char*argv[])
{
    int running_flag=0;
    int search_pid;
 
    if(argc<2)
    {
        printf("Usage:procchild [-r]<pid>\n");
        exit(0);
    }
    else
    {
        if(!strcmp(argv[1],"-r"))
    {
 
 
    running_flag=1;
    if(!strcmp(argv[2],NULL))
    {
        printf("Usage:procchild [-r]<pid>\n");
        exit(0);
    }
    else
    {
        search_pid=atoi(argv[2]);
    }
}
else
{
    search_pid=atoi(argv[1]);
}
func(running_flag,search_pid);
}
return 0;
}
ОШИБКИ:
C:\Users\****\Downloads\Desktop\procchil d.orocchild.c|| undefined reference to `func'|

2-------
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <errno.h>
 
#if defined(BSD)&&!_POSIX_SOURCE
#include <sys/dir.h>
typedef struct direct Dirent;
#endif
 
void func(int flag,int ppid)
{
    DIR *proc_descriptor;
    Dirent *proc_entry;
 
    char buf[1024];
    char commandname[256];
    char str_pid[12];
    char str_ppid[12];
    int status_descriptor;
    int read_length;
    int i,j,k;
    char* ptr;
    int parent_id;
 
    proc_descriptor=opendir("/proc");
    while ((proc_entry=readdir(proc_descriptor))!=NULL)
    {
        if(!strcmp(proc_entry->d_name,".")) {continue;};
        if(!strcmp(proc_entry->d_name,"..")) {continue;};
        strcpy(buf,proc_entry->d_name);
        strcat(buf,proc_entry->d_name);
        strcat(buf,"/status");
        status_descriptor=open(buf,O_RDONLY);
        if(status_descriptor>=0)
        {
            if((read_length=read(status_descriptor,(void*)buf,1024))>0)
            {
                i=0;
                while(1)
                {
                    if(buf[i]==32)
                    {
                        break;}
                        else{i++;}}
                        strncpy(commandname,buf,i);
                        j=i+1;
                        while(1)
                        {
                            if(buf[j]==32) {break;}else{j++;}}
                            ptr=&buf[i+1];
                            strncpy(str_pid,ptr,j-i-1);
                            k=j+1;
                            while(1) {if(buf[k]==32}{break;}else{k++;}}
                            ptr=&buf[j+1];
                            strncpy(str_ppid,ptr,k-j-1);
                            parent_id=atoi(str_ppid);
                            if(parent_id==ppid)
                            {
                                printf("%s\t%s\t%s\n",str_pid,str_ppid,commandname);
 
                            }
                        }
                    }close(status_descriptor);
                }closedir(proc_descriptor);
             return;
        }
ОШИБКИ:

C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c||In function 'func':|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|14|error: 'DIR' undeclared (first use in this function)|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|14|error: (Each undeclared identifier is reported only once|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|14|error: for each function it appears in.)|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|14|error: 'proc_descriptor' undeclared (first use in this function)|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|15|error: 'Dirent' undeclared (first use in this function)|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|15|error: 'proc_entry' undeclared (first use in this function)|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|32|warning: incompatible implicit declaration of built-in function 'strcpy'|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|33|warning: incompatible implicit declaration of built-in function 'strcat'|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|47|warning: incompatible implicit declaration of built-in function 'strncpy'|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|55|error: expected ')' before '}' token|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|55|error: expected expression before '}' token|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|55|error: expected '}' before 'else'|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|57|warning: incompatible implicit declaration of built-in function 'strncpy'|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|65|warning: data definition has no type or storage class|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|65|warning: parameter names (without types) in function declaration|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|66|error: expected identifier or '(' before '}' token|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|66|warning: data definition has no type or storage class|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|66|warning: parameter names (without types) in function declaration|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|67|error: expected identifier or '(' before 'return'|
C:\Users\****\Downloads\Desktop\Kursovay aSystem\Func.c|68|error: expected identifier or '(' before '}' token|
||=== Build finished: 12 errors, 8 warnings ===|


MAKEFILE:
C
1
2
3
4
5
6
7
8
9
10
all: procchild.o func.o
cc findchild.o func.o -o procchild
procchild.o: procchild.c
cc -c procchild.c
func.o: func.c
cc -c func.c
clean:
rm -f*.o *.b procchild
install:
cp procchild/usr/sbin
Добавлено через 3 минуты
Компилировал в CodeBlocks на Windows 7
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2012, 19:15
Ответы с готовыми решениями:

По заданному pid, совершить поиск пути в дереве процессов до процесса с идентификатором 1
Здравствуйте! Помогите пожалуйста решить задачу. Задача такая: Разработать программу, которая по заданному pid, делает поиск пути...

поиск процессов
подскажите как сделать что бы винформ сканировал запущенные процессы и искал сходство в файле тхт

Поиск процессов по параметрам
Написать linux команду, выводящая все процессы, работающие больше 2-х минут.

6
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.03.2012, 01:42
Цитата Сообщение от JerryJackson Посмотреть сообщение
Компилировал в CodeBlocks на Windows 7
название ветки форума не смущает?
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
30.03.2012, 17:42  [ТС]
нет потому что я все равно буду на линуксе запускать

Добавлено через 18 секунд
Но она должна и в винде работать тоже
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
31.03.2012, 18:50
Не раньше, чем там появится /proc
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
31.03.2012, 20:36  [ТС]
если в Linux запустить в CodeBlocks пойдет? или только в vim ?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
01.04.2012, 01:38
Цитата Сообщение от JerryJackson Посмотреть сообщение
DIR *proc_descriptor;
Добавте
C
1
#include <dirent.h>
Дальше не смотрел.
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
13.04.2012, 14:04  [ТС]
все равно не работает , запускаю под Линуксом такие же ошибки

/media/9C3A-E58A/KursovayaSystem/Func.c||In function ‘func’:|
/media/9C3A-E58A/KursovayaSystem/Func.c|16|error: unknown type name ‘Dirent’|
/media/9C3A-E58A/KursovayaSystem/Func.c|29|warning: assignment from incompatible pointer type [enabled by default]|
/media/9C3A-E58A/KursovayaSystem/Func.c|31|error: request for member ‘d_name’ in something not a structure or union|
/media/9C3A-E58A/KursovayaSystem/Func.c|32|error: request for member ‘d_name’ in something not a structure or union|
/media/9C3A-E58A/KursovayaSystem/Func.c|33|error: request for member ‘d_name’ in something not a structure or union|
/media/9C3A-E58A/KursovayaSystem/Func.c|34|error: request for member ‘d_name’ in something not a structure or union|
/media/9C3A-E58A/KursovayaSystem/Func.c|56|error: expected ‘)’ before ‘}’ token|
/media/9C3A-E58A/KursovayaSystem/Func.c|56|error: expected expression before ‘}’ token|
/media/9C3A-E58A/KursovayaSystem/Func.c|56|error: expected ‘}’ before ‘else’|
/media/9C3A-E58A/KursovayaSystem/Func.c|66|warning: data definition has no type or storage class [enabled by default]|
/media/9C3A-E58A/KursovayaSystem/Func.c|66|warning: parameter names (without types) in function declaration [enabled by default]|
/media/9C3A-E58A/KursovayaSystem/Func.c|67|warning: data definition has no type or storage class [enabled by default]|
/media/9C3A-E58A/KursovayaSystem/Func.c|67|warning: parameter names (without types) in function declaration [enabled by default]|
/media/9C3A-E58A/KursovayaSystem/Func.c|68|error: expected identifier or ‘(’ before ‘return’|
/media/9C3A-E58A/KursovayaSystem/Func.c|69|error: expected identifier or ‘(’ before ‘}’ token|
||=== Build finished: 10 errors, 5 warnings ===|

Добавлено через 59 минут
в первом файле, я исправил ошибку procchild.c
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <stdio.h>
 
#include <stdlib.h>
 
#include <fcntl.h>
 
#include <sys/types.h>
 
#include <errno.h>
 
#include <dirent.h>
 
#include "Func.c"
 
int main(int argc, char*argv[])
 
{
 
    int running_flag=0;
 
    int search_pid;
 
 
 
    if(argc<2)
 
    {
 
        printf("Usage:procchild [-r]<pid>\n");
 
        exit(0);
 
    }
 
    else
 
    {
 
        if(!strcmp(argv[1],"-r"))
 
    {
 
 
 
 
 
    running_flag=1;
 
    if(!strcmp(argv[2],NULL))
 
    {
 
        printf("Usage:procchild [-r]<pid>\n");
 
        exit(0);
 
    }
 
    else
 
    {
 
        search_pid=atoi(argv[2]);
 
    }
 
}
 
else
 
{
 
    search_pid=atoi(argv[1]);
 
}
 
func(running_flag,search_pid);
 
}
 
return 0;
 
}
но во втором файле Func.c ничего не получаеться

Добавлено через 20 часов 48 минут
Вот исправленный код Func.c , только осталась одна ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <dirent.h>
#if defined(BSD)&&!_POSIX_SOURCE
#include <sys/dir.h>
#endif
typedef struct dirent Dirent;
 
void func(int flag,int ppid)
{
    DIR *proc_descriptor;
    Dirent *proc_entry;
 
    char buf[1024];
    char commandname[256];
    char str_pid[12];
    char str_ppid[12];
    int status_descriptor;
    int read_length;
    int i,j,k;
    char* ptr;
    int parent_id;
 
    proc_descriptor=opendir("/proc");
    while ((proc_entry=readdir(proc_descriptor))!=NULL)
    {
        if(!strcmp(proc_entry->d_name,".")) {continue;};
        if(!strcmp(proc_entry->d_name,"..")) {continue;};
        strcpy(buf,proc_entry->d_name);
        strcat(buf,proc_entry->d_name);
        strcat(buf,"/status");
        status_descriptor=open(buf,O_RDONLY);
        if(status_descriptor>=0)
        {
            if((read_length=read(status_descriptor,(void*)buf,1024))>0)
            {
                i=0;
                while(1)
                {
                    if(buf[i]==32)
                    {
                        break;
 
                    }
                        else
                        {
                            i++;
                            }
                        }
                        strncpy(commandname,buf,i);
                        j=i+1;
                        while(1)
                        {
                            if(buf[j]==32)
                            {
                                break;
                            }
                            else
                            {
                                j++;
                                }
                                }
                            ptr=&buf[i+1];
                            strncpy(str_pid,ptr,j-i-1);
                            k=j+1;
                            while(1)
 
                            {
                                if(buf[k]==32)
 
                                   {
                                       break;
 
                                   }
                                       else
                                       {
                                           k++;
                                       }
 
                              }
                            ptr=&buf[j+1];
                            strncpy(str_ppid,ptr,k-j-1);
                            parent_id=atoi(str_ppid);
                            if(parent_id==ppid)
                            {
                                printf("%s\t%s\t%s\n",str_pid,str_ppid,commandname);
 
                            }
                        }
                    }
                    close(status_descriptor);
                    closedir(proc_descriptor);
             return;
        }
Добавлено через 1 минуту
||=== 77779, Debug ===|
C:\Programm\77779\main.c||In function 'func':|
C:\Programm\77779\main.c|98|error: expected declaration or statement at end of input|
||=== Build finished: 1 errors, 0 warnings ===|
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2012, 14:04
Помогаю со студенческими работами здесь

Поиск среди процессов
Как программно найти процесс, в котором запущено unity приложения и узнать его pid? В delphi видел пример реализации. Можно ли такое...

Поиск скрытых процессов
Помогите обнаружить процесс скрытый вот этим тык

Поиск процессов по заданому критерию
Доброго, дана задача: Создать программу на язике С figrproc, предназначенную для поиска процессов, использующих виртуальную память...

Поиск нескольких процессов сразу
У меня есть данный код if (GetProcess(NameProcess)) //Тут происходит поиск процесса NameProcess - это переменная где храниться...

Поиск процесса и его дочерних процессов
Всем привет! Сначала опишу ситуацию на примере &quot;CodeBlocks&quot;, чтобы стало понятно чего я хочу: У меня открыт проект в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru