#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<dirent.h>
#include<string.h>
#include<sys/types.h>
#include<pwd.h>
#include<grp.h>
void mode_to_letters(int mode,char str[]);
void do_ls(char dirname[]);
void show_stat_info(char *fname,struct stat *buf);
char *uid_to_name(uid_t uid);
char *gid_to_name(gid_t gid);
int main(int ac,char *av[])
{
   if(ac==1)
      do_ls(".");
   else
        while(ac--)
         {
         printf("%s:\n",*++av);
         do_ls(*av);
         }
}
void do_ls(char dirname[])
{
   DIR *drip;                //the directory
   struct dirent *direntp;   //each entry
   struct stat info;

if((drip=opendir(dirname))==NULL)
        fprintf(stderr,"ls2:cannot open %s\n",dirname);
   else
       {
        while((direntp=readdir(drip))!=NULL)
            if(stat(direntp->d_name,&info)!=-1)
         {
            show_stat_info(direntp->d_name,&info);
        }
            else
        perror(direntp->d_name);
        closedir(drip);
        }
}
void show_stat_info(char *fname,struct stat *buf)
{
   char str[11];
   mode_to_letters(buf->st_mode,str);
   printf("%10s",str);
   //printf("   mode:%o ",buf->st_mode);
   printf("%3d  ",buf->st_nlink);
   printf("%-6s",uid_to_name(buf->st_uid));
   printf("%-7s",gid_to_name(buf->st_gid));
   printf("%8ld ",buf->st_size);
   printf("%12.12s   ",4+ctime(&(buf->st_mtime)));
   printf("%s\n",fname);
}
/*
* This function takes a mode value and a char array
* and puts into the char array the file type and the
* nine letters that correspond to the bits in mode.
* NOTE:It doesn't code setuid,setgid,and sticky
* codes
*/
void mode_to_letters(int mode,char str[])
{
   strcpy(str,"----------");       /*default=no perms*/
  
   if(S_ISDIR(mode)) str[0]='d';    /*directory*/
   if(S_ISCHR(mode)) str[0]='c';    /*char device*/
   if(S_ISBLK(mode)) str[0]='b';    /*block device*/
   if(S_ISREG(mode)) str[0]='-';    /*regular device*/
   
   if(mode & S_IRUSR) str[1]='r';  /*the privilege of the owner*/
   if(mode & S_IWUSR) str[2]='w';
   if(mode & S_IXUSR) str[3]='x';

if(mode & S_IRGRP) str[4]='r';   /*the privilege of the group*/
   if(mode & S_IWGRP) str[5]='w';
   if(mode & S_IXGRP) str[6]='x';
  
   if(mode & S_IROTH) str[7]='r';   /*the privilege of others*/
   if(mode & S_IWOTH) str[8]='w';
   if(mode & S_IXOTH) str[9]='x';
}
/*transit user id to user name*/
char *uid_to_name(uid_t uid)
{
    struct passwd *getpwuid(),*ptr;
    static char numstr[10];
    if((ptr=getpwuid(uid))==NULL)
       {
    sprintf(numstr,"%d",uid);
       return numstr;
       }
       else
         return ptr->pw_name;
}
/*transit gruop id to group name*/
char *gid_to_name(gid_t gid)
{
    struct group *getgrgid(),*grd_ptr;
    static char numstr[10];
   
    if((grd_ptr=getgrgid(gid))==NULL)
       {
        sprintf(numstr,"%d",gid);
    return numstr;
       }
       else
     return grd_ptr->gr_name;
}

linux 中ls命令函数的更多相关文章

  1. linux中ls命令详解 (转)

    -a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录.      -l -- 长(long).列举目 ...

  2. Linux中ls命令详解

    ls命令是linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件,下面我们就来一起看看ls的用法 英文全名:List即列表的意思,当我们学习某种东西的时候要做到知其所 ...

  3. Linux中ls命令用法

    ls 命令的含义是list显示当前目录中的文件名字.注意不加参数它显示除隐藏文件外的所有文件及目录的名字. 1)ls –a 显示当前目录中的所有文件,包含隐藏文件 命令: aijian.shi@U-a ...

  4. linux中ls命令使用选项

    ls:英文全名:List即列表的意思 -a 列出目录下的所有文件,包括以 . 开头的隐含文件.-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.-c 输出文件的 i 节 ...

  5. linux中ls命令

    ls跟dos下的dir命令是一样的都是用来列出目录下的文件 ls参数: -a: ls -a 列出文件下所有的文件,包括以"."开头的隐藏文件(linux下文件隐藏文件是以.开头的, ...

  6. Linux的ls命令在Windows中的应用

    Linux的ls命令在Windows中的应用 注:ls是Linux中的命令.其作用是列出当前目录下的文件与文件夹.效果等同于Wndows中的dir指令. 如下图 下面是详细步骤 步骤一.在桌面新建一个 ...

  7. linux系统中ls命令的用法

    普通文件: -,f目录文件: d链接文件(符号链接): L设备文件:字符设备:c块设备:b命名管道: p套接字文件: s linux文件时间戳 时间分为三种类型:创建时间,修改时间:open访问时间: ...

  8. Linux中exec命令相关

    Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...

  9. Linux下ls命令显示符号链接权限为777的探索

    Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录 ...

随机推荐

  1. 《JavaScript 闯关记》之变量和数据类型

    当程序需要将值保存起来以备将来使用时,便将其赋值给一个变量,值的类型称作数据类型. 变量 JavaScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据.换句话说,每个变量仅仅是 ...

  2. ref 关键字out关键字

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  3. iOS中的下载管理器(支持断点续传)

    在空闲时间自己编写了一个简单的iOS下载管理器.该管理器实现如下功能: 1.能够支持正常的下载,暂停,继续操作. 2.支持断点续传,实现暂停执行继续操作后,依然能正常将文件下载完成. 3.实现实时状态 ...

  4. Kill命令模拟1

    #include<sys/types.h> #include<signal.h> #include<stdio.h> #include<stdlib.h> ...

  5. hdu 4612 Warm up(无向图Tarjan+树的直径)

    题意:有N个点,M条边(有重边)的无向图,这样图中会可能有桥,问加一条边后,使桥最少,求该桥树. 思路:这个标准想法很好想到,缩点后,求出图中的桥的个数,然后重建图必为树,求出树的最长直径,在该直径的 ...

  6. Activiti+oracle 启动项目时不能自动建表或更新表的问题分析及解决办法

    现象描述:按照正常配置,第一次启动时不能自动建表 关键配置片段如下: <bean id="processEngineConfiguration" class="or ...

  7. 「北京」京东 JD.COM 招聘中/高级前端工程师

    工作职责: 负责前端界面的前端构建,各类交互设计与实现: 前端样式和脚本的模块设计及优化: 协同后台开发人员完成项目: 职位要求: 专科及以上学历,2年以上前端重构与脚本开发经验,计算机或相关专业者优 ...

  8. android studio error configuration with name default not found

    Android Studio报错: android studio error configuration with name default not found 在进行sync的时候,提示Error: ...

  9. 命名空间 - PHP手册笔记

    概述 命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念,比如在操作系统中,目录用来将相关文件分组,对于目录中的文件来说,目录就扮演了命名空间的角色.这个原理应用到程序设计领域就是命名空间 ...

  10. tornado.web.Application类配置及使用

    Application configuration classtornado.web.Application(handlers=None, default_host='', transforms=No ...