Как проанализировать две конкретные данные из результата ls -l в качестве аргументов с помощью функции scanf? - PullRequest
0 голосов
/ 28 января 2019
someuser:~/repo/a1/part1> /bin/ls -l
total 12
-rw------- 1 someuser student  489 Jan 28 07:30 file.c
-rw------- 1 someuser student  462 Jan 16 12:44 Make
drwx------ 2 someuser student 4096 Jan 28 03:59 test_inputs

Взять, например, вторую строку в результате.

-rw------- 1 someuser student 489 Jan 28 07:30 file.c

Я хочу разобрать разрешение -rw------- и размер файла 489 в качестве аргументов в другомфункция через функцию scanf.Как я могу это реализовать?

1 Ответ

0 голосов
/ 28 января 2019

Используйте fgets ()

Прочитайте строку , а затем проанализируйте ее. @ Некоторый программист, чувак

"scanf .... is required" - плохое требование.Но иногда наши клиенты - ну, в некотором смысле, глупы.

с использованием функции scanf

Ключ заключается в том, что всю строку необходимо проанализировать для выравнивания ввода для следующего анализа.

A довольно простоПодход заключается в использовании:

  • "*" для сканирования по спецификатору, но не для сохранения.
  • Ищите окончательный '\n' или конец файла.

scanf () подробности

// -rw------- 1 someuser student  489 Jan 28 07:30 file.c

char rights[10+1];
unsigned long long size;
int count;
for (;;) {
  char eol = '\n';
  count = scanf("%10s %*d %*s %*s %llu %*s %*d %*d:%*d %*s%c", rights, &size, &eol);
  if (count == EOF) break;
  if (count >= 2 && eol == '\n') {
    printf("Rights:<%s> size:%llu\n", rights, size);
  } else {
    // input ill formed, handle error
    // Perhaps report error, then read and toss, up to the end-of-line
    TBD();
  }
}
...