一个类ls函数

  1 #include <stdio.h>
  2 #include <sys/types.h>
  3 #include <sys/stat.h>
  4 #include <dirent.h>
  5 #include <string.h>
  6 #include <pwd.h>
  7 #include <time.h>
  8 #include <grp.h>
  9
 10 void showls(struct stat *p,char * d_name)
 11 {
 12     char flag;
 13     if(S_ISREG(p->st_mode))flag=‘-‘;
 14     else if(S_ISDIR(p->st_mode))flag=‘d‘;
 15         else if(S_ISCHR(p->st_mode))flag=‘c‘;
 16         else if(S_ISBLK(p->st_mode))flag=‘b‘;
 17     else if(S_ISSOCK(p->st_mode))flag=‘s‘;
 18         else if(S_ISFIFO(p->st_mode))flag=‘P‘;
 19         else if(S_ISLNK(p->st_mode))flag=‘l‘;
 20     else flag=‘?‘;
 21     printf("%c\t",flag);
 22
 23     //printf("%o\t",p->st_mode&0777);
 24     const char* rwx="rwx";
 25     int i;
 26     for(i=0;i<9;i++)
 27         printf("%c",p->st_mode&0400?rwx[i%3]:‘-‘);
 28     printf("\t");
 29
 30
 31     printf("%2ld\t",p->st_nlink);
 32
 33     struct passwd *s;
 34     s=getpwuid(p->st_uid);
 35     printf("%7s\t",s->pw_name);
 36
 37     printf("%7s\t",getgrgid(p->st_gid)->gr_name);
 38
 39     printf("%ld\t",p->st_size);
 40
 41     char buf[100];
 42     time_t t=p->st_mtime;
 43     strftime(buf,sizeof(buf),"%F %T",localtime(&t));
 44     printf("%s\t",buf);
 45
 46     printf("%s\t",d_name);
 47     printf("\n");
 48 }
 49
 50 int main(int argc,char* argv[])
 51 {
 52     char* path;
 53     if(argc==1)
 54     {
 55         path=".";
 56     }
 57
 58     if(argc==2&&strcmp(argv[1],"-l")==0)
 59     {
 60         path=".";
 61     }
 62
 63     else if(argc==2)
 64     {
 65         path=argv[1];
 66     }
 67
 68     if(argc==3)
 69     {
 70         path=argv[2];
 71     }
 72
 73     if(argc>=2&&strcmp(argv[1],"-l")==0)
 74         printf("类型\t权限\t\t链接数\t用户名\t组\t字节数\t最后一次修改时间\t文件名\n");
 75     if(opendir(path)==NULL)
 76     {//检查是否有这个目录
 77         printf("文件打开失败!请正确输入!\n");
 78         printf("%m");
 79         return -1;
 80     }
 81     DIR *p = opendir(path);//指针指向当前路径的所有内容
 82     if(chdir(path)!=0)
 83     {//设置 path 作为当前工作目录
 84         perror("错误");
 85         return -1;
 86     }
 87     struct dirent *q;//结构体划分内容块
 88     while((q=readdir(p))!=NULL)
 89     {//从工作目录读取
 90         if(q->d_name[0]==‘.‘)
 91             continue;//不显示隐藏文件
 92
 93         if(argc>=2&&strcmp(argv[1],"-l")==0)
 94         {
 95             struct stat s;
 96             stat(q->d_name,&s);
 97             showls(&s,q->d_name);
 98         }
 99         if(argc==1)
100             printf("%s\t",q->d_name);
101     }
102     printf("\n");
103     closedir(p);
104     return 0;
105 }
时间: 2024-10-07 06:39:01

一个类ls函数的相关文章

一个类成员函数的局部静态变量问题

之前工作中遇到一个问题,就像题目中描述的那样,看起来题目有些拗口复杂,这里解释下,当时遇到的需求需要这样处理:调用某个类对象的某个成员函数时,第一次有具体意义的,其他时候都是保持不变的.无意义的.这个需求可以看做是在调用某成员函数时,第一次进行初始化,其他时候不进行操作,即在首次调用时进行初始化,根据这点,很容易想到c/c++里面的static变量,它的作用是保持变量内容的持久,存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化.根据需求,使用static局部变量,写下

解决两类相互包含使用另一个类成员函数

// VistorMode.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <IOSTREAM> using namespace std; class B; class A{ public: /* void getBaction(B * p){ p->action(); //会出错,error:use of undefined type

以一个类成员函数来说明拷贝构造函数与析构函数何时调用

mystring operator +(const char *str, const mystring &it) { mystring stro; strcpy(stro.s, str); strcat(stro.s, it.s); printf("stro = %p\n", stro.s); return stro; } 当return stro时,其实返回的是stro的一个副本.这时就会调用拷贝构造函数.副本stro其实是在为外部使用作准备.会后于原始stro销毁. 接着,

vs2015如何设置类或函数前不显示引用的数量

这几天,从vs2012换成vs2015,感觉15版本增加了一个类或函数前提示引用的数量,这个感觉很别扭,如何取消显示这个呢? 问题如下: 取消显示这个引用的步骤: 找到菜单栏: 工具 ---> 选项  ---> 文本编辑器 ---> 所有语言 ---> CodeLens 设置取消启用CodeLens,并保存就可以了 设置后结果如下:

Qt 类外调用一个 private slots 函数

MainWindow中 private slots 函数 void print_on_log(QString strtemp);输出一个字符串到编辑窗口中 class MainWindow:publicQMainWindow {Q_OBJECTpublic:explicitMainWindow(QWidget*parent=0);~MainWindow();privateslots:voidprint_on_log(QStringstrtemp); 定义一个新类Test_one在此类中调用上面的

Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行

以下是类的代码: 1 var Functions = { 2 oFunctions: null, 3 add: function (oFunc, oNewFunc) { 4 var oNew = function () { 5 oFunc(); 6 oNewFunc(); 7 }; 8 return oNew; 9 } 10 }; 以下是测试代码: 1 function one() { 2 alert(1); 3 } 4 5 function two() { 6 alert(2); 7 } 8

pkzd(一个类Unix操作系统的实现)

pkzd: 一个类unix操作系统的简单实现, 由unix v6改写而成 注: 系统的名字取自游戏pokemon和zelda(注意是pkzd不是pmzd哦) 系统简介: pkzd是一个根据unix v6改写的简单的请求调页的类unix操作系统, 系统的设计力求简洁, 所以很多设计非常简陋.模拟机: 系统镜像pkzd.img可以在bochs, qemu和virtualbox中运行(virtualbox中的格式为hdd并口硬盘, 只要把pkzd.img改成pkzd.hdd就行了)硬件支持: x86架

一个类有多大

#include <iostream> using namespace std; class A{}; class B { int b; char c; }; class C { int c1; static int c2; }; int C::c2 = 1; class D:public C,public B{ int d; }; int main() { cout<<"sizeof(A)="<<sizeof(A)<<endl; cou

【C++缺省函数】 空类默认产生的6个类成员函数

1.缺省构造函数. 2.缺省拷贝构造函数. 3. 缺省析构函数. 4.缺省赋值运算符. 5.缺省取址运算符. 6. 缺省取址运算符 const. <span style="font-size:18px;"> class A { public: A(){}//缺省构造函数 A(const A&){}//拷贝构造函数 ~A(){}//析构函数 A&operator=(const A&){}//赋值运算符 A*operator&(){}//取址运算