Как написать программу на C, которая выведет некоторый столбец из результата команды Linux?

#c

#c

Вопрос:

Я хотел бы написать программу, которая после ввода в терминал :

 gcc task.c -o task
ps aux | ./task
 

будет выводить% данных CPU в виде стандартного вывода.

Я написал начало программы :

 int main(int argc, char *argv)
{


char buffer[BUFSIZ];
char *data = calloc(1,1);
while(fgets(buffer,BUFSIZ,stdin) != NULL)
{
    data = realloc(data,strlen(data) 1 strlen(buffer));
    strcat(data,buffer);


}
 

Я не знаю, хорош ли этот способ получения данных из стандартного вывода программы Linux, но после печати printf("%s",data); я получаю совсем другой результат (некоторые дополнительные знаки).

Комментарии:

1. Было бы проще сделать что-то вроде ps aux | cut -c 3 | ./task ?

2. Непонятно, зачем вам нужно перераспределять память. Вы не проверяете, прочитали ли вы полную строку. В основном вам нужно выяснить, как извлечь N-й столбец из строки и распечатать его. Вы могли бы использовать POSIX getline() , чтобы гарантировать чтение всей строки.