Это подсказка ... Попробуйте разработать свой код, начиная с этого! :)

ствуйте!

Я хочу сделать простую программу c, которая будет работать как ps -e. Единственными столбцами, которые должны быть показаны, являются PID и CMD. Вот мой код:

#include <dirent.h>
#include <errno.h>
#include <sys/types.h>
#include <stdio.h>
#include <regex.h>
int main()
{
DIR *dir;
struct dirent *entry;
if ((dir = opendir("/proc")) == NULL)
perror("operation error");
else 
{
printf("PID      CMD\n");
while ((entry = readdir(dir)) != NULL)
printf("  %s\n", entry->d_name);
closedir(dir);
}
return 0; 
}

Мои квесты:

1) Как я могу показать только папки с номерами (я не знаю, как реализовать regcomp ())?

2) Как рядом с ПИД записать CMD (я не могу склеить (?) Строки с путем, если есть папка с номером)?

 Bombozaur66622 нояб. 2017 г., 17:50
@SergioFormiggini как добавить переменную в путь?
 Sir Jo Black22 нояб. 2017 г., 17:45
Попробуйте прочитать в папку / proc. Там вы можете найти несколько файлов пути / {pid} / stat, содержащих интересные вещи (где pid - это pid процесса - число)
 Bombozaur66622 нояб. 2017 г., 17:50
@tripleee, какая команда хороша для этого?
 tripleee22 нояб. 2017 г., 17:47
Вы имеете в виду ограничить поиск только каталогами, чье имя все числовое? Просто отсканируйте его на наличие символа, который не является числом.
 Sir Jo Black22 нояб. 2017 г., 17:48
Да, в папке / proc есть какая-то папка с именем с номерами. Это идентификаторы процессов в процессе. В каждой папке {pid} есть текстовый файл с именем stat.

Ответы на вопрос(1)

Решение Вопроса

)

#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>

int readData(char *dirname);

int readData(char *dirname)
{
    FILE * file;
    char buffer[1024]={0};

    sprintf(buffer,"/proc/%s/stat",dirname);

    file = fopen(buffer,"r");
    if (!file)
        return errno;

    while(fgets(buffer,sizeof(buffer),file))
        puts(buffer);

    if (file)
        fclose(file);

    return errno;
}

int main(void)
{
    DIR * dir;

    struct dirent * entry;

    if ( (dir = opendir("/proc")) == NULL )
        perror("operation error");

    while ((entry = readdir(dir))) {
        if ( strlen(entry->d_name) == strspn(entry->d_name, "0123456789"))
            if (readData(entry->d_name))
                break;
    }

    if (dir)
        closedir(dir);

    return errno;
}

Ваш ответ на вопрос