• 大小: 4KB
    文件类型: .c
    金币: 2
    下载: 0 次
    发布日期: 2024-01-07
  • 语言: 其他
  • 标签: linux  ls  -R  递归显示  

资源简介

这是自己写的ls -R函数,实现了分栏、隐藏文件隐藏、上色等功能,没有排序。用的时候根据输入不同有两种功能 ls 和ls -R 、用的时候只要再加一个主函数就可以了。

资源截图

代码片段和文件信息

#include	
#include
#include
#include
#include

void do_ls(char[]int);
void dostat(char *char *);
void show_file_info( char * struct stat *);
void mode_to_letters( int  char [] );
char *uid_to_name( uid_t );
char *gid_to_name( gid_t );

lsR(int ac char *av[])
{
int R_flag = 0;
int anyfiles =  0;

while ( --ac ){
if ( strcmp(“-R“ *++av) == 0 )
R_flag = 1;
else {
do_ls( *av  R_flag );
anyfiles = 1;
}
}
if ( !anyfiles )
do_ls(“.“ R_flag);
}


void do_ls( char dirname[]  int subdirs )

{
DIR *dir_ptr;
struct dirent *direntp;
char *fullpath;


if ( ( dir_ptr = opendir( dirname ) ) == NULL ){
fprintf(stderr“ls2: cannot open %s\n“ dirname);
return;
}


printf(“%s:\n“ dirname);
fullpath = (char *)malloc(strlen(dirname) + 1 + MAXNAMLEN + 1);


while ( ( direntp = readdir( dir_ptr ) ) != NULL  )
    {
               char cname[20];
               strcpy(cnamedirentp->d_name);
               if(cname[0]!=‘.‘)
        {
sprintf(fullpath“%s/%s“dirnamedirentp->d_name);
dostat( fullpath direntp->d_name );
}
    }


if ( subdirs ){
rewinddir(dir_ptr);
while ( ( direntp = readdir( dir_ptr ) ) != NULL ){
                               if(direntp->d_name[0]==‘.‘)
continue;
sprintf(fullpath“%s/%s“dirnamedirentp->d_name);
if ( isadir1(fullpath) ){
putchar(‘\n‘);
do_ls( fullpath subdirs );
}
}
}

closedir(dir_ptr);
free(fullpath);
}

void dostat( char *fullpath char *filename )
{
struct stat info;

if ( lstat(fullpath &info) == -1 )
perror(filename);
else
show_file_info(filename &info);
}

void show_file_info( char *filename struct stat *info_p )

{
char *uid_to_name() *ctime() *gid_to_name() *filemode();
void mode_to_letters();
        char    modestr[11];

mode_to_letters( info_p->st_mode modestr );

printf( “%s“     modestr );
printf( “%4d “   (int) info_p->st_nlink);
printf( “%-8s “  uid_to_name(info_p->st_uid) );
printf( “%-8s “  gid_to_name(info_p->st_gid) );
printf( “%8ld “  (long)info_p->st_size);

评论

共有 条评论