Вам нужно будет создать строку, содержащую полный сценарий, который вы хотите запустить, или вам нужно будет создать сценарий, который можно просто запустить, а затем организовать чтение результата этого сценария с помощью popen()
.Любой возможен;что проще, зависит от уровня ваших навыков написания сценариев по сравнению с вашими навыками программирования на C.
char command[4096];
strcpy(command, "TOTAL=$(free | grep Mem| awk '{print $2}')\n");
strcat(command, "grep -v procs $1 | grep -v free |\n");
strcat(command, "awk '{USED=TOTAL-$4-$5-$6;print USED}' TOTAL=$TOTAL\n");
FILE *in = popen(command, "r");
...read the results, etc...
Строковые операции упрощают первый сценарий оболочки, а затем передают значение TOTAL, вычисленное в awk
.
Другой способ сделать это - прочитать выходные данные из free | grep Mem | awk '{print $2}'
- значения TOTAL - из одного использования popen()
, а затем встроить это значение во вторую команду:
char command[4096];
strcpy(command, "free | grep Mem| awk '{print $2}'");
char total[20];
FILE *in1 = popen(command, "r");
...read TOTAL into total...
strcpy(command, "grep -v procs $1 | grep -v free |\n");
strcat(command, "awk '{USED=TOTAL-$4-$5-$6;print USED}' TOTAL=");
strcat(command, total);
FILE *in2 = popen(command, "r");