Вы можете использовать popen, например так:
#include <stdio.h>
int main()
{
FILE * fp = popen("ls -l", "r");
char buf[1024];
while (fgets(buf, 1024, fp)) {
printf("returned: \"%s\"\n", buf);
}
return 0;
}
Это показывает только чтение каждой строки из команды, вам все равно придется разделить текст, чтобы сделать то, что вы хотите.
И только потому, что это забавно, здесь есть простая функция для извлечения полей из строкового буфера:
char * get_field(char *buffer, int field)
{
int white = 1; // simple state machine
char *p;
char *first = NULL;
for (p=buffer; *p; p++) {
if (white) {
if (*p > ' ') {
white = 0;
first = p;
}
} else {
if (*p <= ' ') {
white = 1;
field--;
if (!field && first)
return strndup(first, p-first);
}
}
}
return NULL;
}
int main()
{
FILE * fp = popen("ls -l", "r");
char buf[1024];
while (fgets(buf, 1024, fp)) {
char *month = get_field(buf, 6);
if (month) {
printf(" month: \"%s\"\n", month);
free(month);
}
char *file = get_field(buf, 9);
if (file) {
printf(" file: \"%s\"\n", file);
free(file);
}
}
return 0;
}
Это простой метод грубой силы, подходящий для простых программ, и не обеспечивающийфункциональность типичной функции split ().Но это иллюстрирует один из способов сделать это в C.