C-ls可选标志

时间:2018-08-16 02:06:50

标签: c shell unix optional ls

我有一个基本的Shell程序,可以使用cd更改目录并使用ls列出文件。我想通过向ls命令添加可选标志来进一步扩展此功能。特别是,我想实现ls -l(小写的“ ell”)命令,该命令在长列表之前的一行上显示所有文件大小的总和。我不确定该如何实现。到目前为止,我的代码是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>
#define MAX_LENGTH 1024
#define DELIMS " \t\r\n"

int main(int argc, char *argv[]) {
  char *cmd;
  char line[MAX_LENGTH];

  while(1){
    printf("> ");
    if (!fgets(line, MAX_LENGTH, stdin)) break;

    if ((cmd = strtok(line, DELIMS))) {
        char *arg = strtok(0, DELIMS);
        if (strcmp(cmd, "cd") == 0) {

        if (!arg) fprintf(stderr, "cd missing argument.\n");
        else {
            chdir(arg);
        } 
      } 
        else if (strcmp(cmd, "ls") == 0) {
        struct dirent **namelist;
        int n;
        n = scandir(".",&namelist,NULL,alphasort);
        if(n < 0)
        {
            perror("scandir");
            exit(EXIT_FAILURE);
        }
        else
        {
        while (n--)
        {
            printf("%s\n",namelist[n]->d_name);
            free(namelist[n]);
        }
        free(namelist);
        }
      }
        else if (strcmp(cmd, "exit") == 0) {
        break;
      }
    }
  }

  return 0;
}

0 个答案:

没有答案