模仿linux命令ls
2013-11-20 10:37
316 查看
最近学linux下C编程,学到文件方面,编写了一个模仿命令ls的C语言程序,先贴代码
权限掩码我用个数组存储,里面存储的是八进制
然后在用位与运算判断是否有个这权限
至于权限存储是在struct stat结构中st_mode的0-8位,具体我引用了别人的文章http://blog.chinaunix.net/uid-25100840-id-1762681.html
#include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<dirent.h> #include<unistd.h> #include<stdlib.h> #include<string.h> void printmode(mode_t modes) { int i=0; char descrip[11]; static short octarray[9]={0400,0200,0100,0040,0020,0010,0004,0002,0001}; static char perms[10]="rwxrwxrwx"; if(S_ISREG(modes)) descrip[0]='-'; //Add file type else if(S_ISDIR(modes)) descrip[0]='d'; else { printf("\nUnknown mode\n"); return; } for(i=1;i<10;i++) { if(modes&octarray[i-1]) descrip[i]=perms[i-1]; else descrip[i]='-'; } for(i=0;i<10;i++) { printf("%c",descrip[i]); } printf(" "); } void printdir(char path[]) { DIR *dir; struct dirent *entry; struct stat statbuff; mode_t modes; printf("The working directory is %s \n",path); if((dir=opendir(path)) == NULL) { fprintf(stderr,"Can not open directory: %s\n",path); return; } chdir(path); while((entry=readdir(dir))!=NULL) { lstat(entry->d_name,&statbuff); modes=statbuff.st_mode; if(S_ISDIR(modes)) { if(strcmp(".",entry->d_name)==0||strcmp("..",entry->d_name)==0) { continue; } printmode(modes); printf("%s/\n",entry->d_name); continue; } printmode(modes); printf("%s\n",entry->d_name); } closedir(dir); } int main() { char buffer[40]=""; getcwd(buffer,sizeof(buffer)); printdir(buffer); return 0; }目前实现功能就是列出当前工作目录的文件列表,省略目录".'和"..",还有列出文件属性。
权限掩码我用个数组存储,里面存储的是八进制
static short octarray[9]={0400,0200,0100,0040,0020,0010,0004,0002,0001};
然后在用位与运算判断是否有个这权限
for(i=1;i<10;i++) { if(modes&octarray[i-1]) descrip[i]=perms[i-1]; else descrip[i]='-'; }
至于权限存储是在struct stat结构中st_mode的0-8位,具体我引用了别人的文章http://blog.chinaunix.net/uid-25100840-id-1762681.html
相关文章推荐
- linux c socket之多路复用:绑定多个端口
- 批处理ftp上传文件到linux服务器上
- linux test命令详解
- 使用Linux命令来发送信息
- linux下configure命令详细介绍
- 揭开Linux操作系统的Swap交换区之谜
- Linux 中 RPM 命令参数使用详解
- 非常不错的Linux命令分组(来自wikipedia)
- Linux makefile 教程非常详细
- LINUX几个查看系统硬件信息的有用命令
- Linux用户环境变量
- 如何看linux是32位还是64
- Unix/Linux获取进程的详细信息
- linux 链接远程目录
- linux 使用锐捷认证上网
- minicom for linux键盘无法响应问题解决
- Linux下终端输入校正错误
- LINUX守护进程介绍
- linux write函数
- linux 解压文件