如何通过使用scanf函数将ls -l结果中的两个特定信息解析为参数?

时间:2019-01-28 13:45:38

标签: c scanf ls

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 :(得分:0)

  

使用fgets()

读取,然后进行解析。 @Some programmer dude

“ scanf ....是必需的”是一个不好的要求。但是有时候,出来的顾客有些愚蠢。

  

使用scanf函数

关键是需要对整行进行解析以使输入对齐以进行下一次解析。

一种相当简单的方法是使用:

  • "*"按说明符进行扫描,但不保存。
  • 查找最后的'\n'或文件末尾。

scanf() details

// -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();
  }
}