Linux C程序模拟ls命令

时间:2017-03-22 04:26:42

标签: c linux bash scripting

解决

我正在尝试使用C创建一个与默认ls命令功能类似的程序。我遇到了其中一个属性(-l)和当前格式的问题。对于-l,它没有运行应该使其成为带有inode和名称的简单列表的行(argv [2]),而是与-f的功能相同。

#include <stdio.h>
#include <sys/types.h>
#include <sys/dir.h>
#include <sys/stat.h>

struct direct **dirs; 

int main (int argc, char* argv[])
{
  struct stat statb;
  int nent, i;
  int x = 0;
  int y;

  char *F = argv[1];
  char *l = argv[2];
  char *others = argv[3];

  nent = scandir (".", &dirs, NULL, NULL);

  for (i = 0; i < nent; i ++) {       
    if(argv[1]) {   
      stat(dirs[i]->d_name, &statb);  

      if (y == 0) { 
        printf("\n%-16s",dirs[i]->d_name);   
        switch (statb.st_mode & S_IFMT) { 
        case S_IFDIR :                          
          printf("/\t    ");                          
          break;     

        case S_IFREG :                          
          printf("*\t    ");                          
          break;     

        }           
      }                 
      else {  
        printf ("%-16s",dirs[i]->d_name);                   
        switch (statb.st_mode & S_IFMT) { 
        case S_IFDIR :                  
          printf("/\t    ");          
          break;             

        case S_IFREG :                      
          printf("*\t    ");          
          break;      

        }           
      }      

      x++;           
      y = x%5;         
    }         
    else if (argv[2]) {
      printf("I-node = %d   name = %s\n",    dirs[i]->d_ino, dirs[i]->d_name);
}        
else { 

  if (y == 0) {                       
    printf("\n%-16s\t    ",dirs[i]->d_name); 
  }         
  else {       
    printf("%-16s\t    ",dirs[i]->d_name); 
      }    

      x++;    
      y = x%5;      

    }
  } 

  printf("\n");
}

1 个答案:

答案 0 :(得分:0)

您永远不会输入else条款。如果argv[1]为NULL,则argv[2]将为NULL。你只需要解析参数。