第3章 目录与文件属性:编写ls
来源:互联网 发布:字幕制作软件 编辑:程序博客网 时间:2024/04/28 12:14
/* * ls1.c * purpose list contents of directory or directories * action if no args, use . else list files in args */#include <stdio.h>#include <sys/types.h>#include <dirent.h>void do_ls(char []);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[]) /* * list files in directory called dirname */{ DIR *dir_ptr; /* the direcotry */ struct dirent *direntp; /* each entry */ if ((dir_ptr = opendir(dirname)) == NULL ) fprintf(stderr, "ls1:cannot open %s\n", dirname); else { while ((direntp = readdir(dir_ptr)) != NULL) printf("%s\n", direntp->d_name); closedir(dir_ptr); }}
/* * ls2.c * purpose list contents of directory or directories * action if no args, use . else list files in args * note uses stat and pwd.h and grp.h * BUG: try ls2 /tmp */#include <stdio.h>#include <sys/types.h>#include <dirent.h>#include <sys/stat.h>void do_ls(char []);void dostat(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);void 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[]) /* * list files in directory called dirname */{ DIR *dir_ptr; /* the directory */ struct dirent *direntp; /* each entry */ if ((dir_ptr = opendir(dirname)) == NULL) fprintf(stderr, "ls1:cannot open %s\n", dirname); else { while ((direntp = readdir(dir_ptr)) != NULL) dostat(direntp->d_name); closedir(dir_ptr); }}void dostat(char *filename){ struct stat info; if(stat(filename, &info) == -1) /* cannot stat */ perror(filename); /* say why */ else /* else show info */ show_file_info(filename, &info);}void show_file_info(char *filename, struct stat *info_p) /* * display the info about filename. The info is stored in struct at *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); printf("%.12s ", 4 + ctime(&info_p->st_mtime)); printf("%s\n", filename);}/* * utility functions *//* * 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 does not 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 devices */ if (S_ISBLK(mode)) str[0] = 'b'; /* block devices */ if (mode & S_IRUSR) str[1] = 'r'; /* 3 bits for user */ if (mode & S_IWUSR) str[2] = 'w'; if (mode & S_IXUSR) str[3] = 'x'; if (mode & S_IRGRP) str[4] = 'r'; /* 3 bits for group */ if (mode & S_IWGRP) str[5] = 'w'; if (mode & S_IXGRP) str[6] = 'x'; if (mode & S_IROTH) str[7] = 'r'; /* 3 bits for other */ if (mode & S_IWOTH) str[8] = 'w'; if (mode & S_IXOTH) str[9] = 'x';}#include <pwd.h>char *uid_to_name(uid_t uid) /* * returns pointer to username associated with uid, uses getpw() */{ struct passwd *getpwuid(), *pw_ptr; static char numstr[10]; if ((pw_ptr = getpwuid(uid)) == NULL) { sprintf(numstr, "%d", uid); return numstr; } else return pw_ptr->pw_name;}#include <grp.h>char *gid_to_name(gid_t gid) /* * returns pointer to group number gid. used getgrgid(3) */{ struct group *getgrgid(), *grp_ptr; static char numstr[10]; if ((grp_ptr = getgrgid(gid)) == NULL) { sprintf(numstr, "%d", gid); return numstr; } else return grp_ptr->gr_name;}
0 0
- 第3章 目录与文件属性:编写ls
- 第3章 目录与文件属性:编写 ls
- 目录与文件属性(ls的编写)
- 《鸟哥的linux》-第6章-linux的文件属性与目录配置
- 第二章 第一部分 Linux的文件属性与目录配置
- 通过ls查看文件属性
- ls命令 & 文件属性
- ls 查看文件与目录
- Linux的文件属性与目录配置
- Linux学习笔记-文件属性与目录配置
- 《鸟哥的Linux私房菜 基础学习篇(第二版)》 读书笔记 第06章 Linux的文件属性与目录配置
- Linux C编程学习笔记(5):文件属性操作和目录操作,ls的实现
- ls命令显示的文件属性
- 编写 ls
- ls列出目录与文件详解(转载)
- ls 与du 查看目录大小区别
- Shell命令编写——显示目录信息ls
- linux笔记二(文件属性与目录配置)
- halcon图像处理——1D测量
- android轮播图示例
- 关于linux系统和tomcat时间不一致的问题
- 优化mysql连接数访问量
- Linux下修改TomcatJVM内存大小
- 第3章 目录与文件属性:编写ls
- 解决Tablayout与ViewPager关联后,Tablayout动态生成的tab不显示问题
- C++中的this指针
- angular2.0数据绑定语法
- jdk1.6和jdk1.7中substring的区别
- KNN算法
- ssm框架学习---将本地代码托管到github上
- 快速幂
- Android跨进程通信的四种方式