#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()
, чтобы гарантировать чтение всей строки.