学习笔记:linuxc第六章下
2015-07-26 23:30
417 查看
本章讲述了一些基本的文件操作,文件主要包含两方面的内容:(1)文件本身包含的数据,(2)文件属性。下面,我简述一下文件属性操作,和在学习、练习过程觉得应该注意的地方。
1.获取文件属性:在shell下直接用命令ls获取文件属性在程序中需要用到stat/fstat/lstat函数,这三个函数都是用来获取文件信息,区别见下面函数声明及其注释
2.设置文件属性:
同样在shell下可以使用一些命令,如chmod来完成。在程序中通过一系列函数来修改文件属性,如chmod/fchmod等。这里主要介绍一下umask函数。
umask函数用于设置文件创建时使用的屏蔽字,并返回以前的值(前提:没有出错)
在进程创建一个新文件或者目录时,新文件的实际存取权限是mode与umask按照mode&~umask运算以后的结果,umask函数用来修改进程的umask,umask函数的参数可以直接取值,也可以系统调用。具体应用请参考代码及注释。
首先,ls命令好多地方都用到了排序功能。以下是我用
详情请参考代码:
在ls命令中有一个很重要的功能-R,这里简要说明一下,详情请参考代码及注释
有个很重要的步骤:
以上,就是我学习linuxc第六章的一些笔记,觉得比较重要,容易出错的地方也很多,希望看到这篇博客的人如果觉得我有哪些地方写得不好或者出错了,能给我回复一下下,小女子感激不尽!
文件属性操作:
1.获取文件属性:在shell下直接用命令ls获取文件属性在程序中需要用到stat/fstat/lstat函数,这三个函数都是用来获取文件信息,区别见下面函数声明及其注释
[code]/*获取filename指定的文件名的信息*/ int stat(const char *filename, struct stat *buf); /*获取描述符filedes指定文件名信息*/ int fstat(int filedes, struct stat *buf); /*对于符号链接文件,lstat返回链接文件本身信息,stat返回链接指向的文件信息*/ int lstat(const char *file_name, struct stat *buf);
2.设置文件属性:
同样在shell下可以使用一些命令,如chmod来完成。在程序中通过一系列函数来修改文件属性,如chmod/fchmod等。这里主要介绍一下umask函数。
umask函数用于设置文件创建时使用的屏蔽字,并返回以前的值(前提:没有出错)
在进程创建一个新文件或者目录时,新文件的实际存取权限是mode与umask按照mode&~umask运算以后的结果,umask函数用来修改进程的umask,umask函数的参数可以直接取值,也可以系统调用。具体应用请参考代码及注释。
[code]umask(0); //不屏蔽任何权限 umask(S_IRWXO); //屏蔽其他用户的所有权限。
以下是我在通过函数实现自己简化版ls命令的一些代码。
首先,ls命令好多地方都用到了排序功能。以下是我用
快排通过排序时间,来对文件名的排序,这样,在获取文件属性的时候就可以直接传文件名为参数实现 -t 功能。
详情请参考代码:
[code] /*file_name 代表文件名,time代表时间,left最左边,right最右边*/ void sort_time( char file_name[256][PATH_MAX+1], int left, int right,char time[256][PATH_MAX] ) { int i=left; int j=right; char key[80]; //时间标识 char key1[80]; //文件名标识 strcpy(key,time[left]); strcpy(key1,file_name[left]); if(left >= right){ return ; } while( i<j ){ while( i<j && strcmp(key, time[j]) <0){ j--; } strcpy(time[i],time[j]); strcpy(file_name[i], file_name[j]); while(i<j && strcmp(time[i], key) <=0){ i++; } strcpy(time[j],time[i]); strcpy(file_name[j], file_name[i]); } strcpy(time[i], key); strcpy(file_name[i],key1); sort_time(file_name, left, i-1, time); // 递归左边 sort_time(file_name, i+1, right, time); //递归右边 }
在ls命令中有一个很重要的功能-R,这里简要说明一下,详情请参考代码及注释
[code]void print_dir(char *path) //接收路径 { DIR *dir=NULL; struct dirent *ptr; char filenames[2000]; //保存路径名 int len=0; //获取路径长度(按字节) len=strlen(path); dir=opendir(path); //打开目录 if(dir==NULL){ //判断是否成功打开 return ; } while((ptr=readdir(dir)) !=NULL ) //货期该目录下的所有文件 { /*保持路径正确*/ strncpy(filenames, path, len); filenames[len]='\0'; strcat(filenames, ptr->d_name); filenames[len+strlen(ptr->d_name)]='\0'; if(ptr->d_type==8){ //=8代表是文件,直接输出文件名 printf("%s \n",ptr->d_name); } else if(ptr->d_type == 4){ //=4代表是目录,递归获取该目录下所有文件信息 printf("%s \n",ptr->d_name); print_dir(filenames); } } }
有个很重要的步骤:
遍 历必须遍历到所有目录下的所有文件,输出目录名及文件名。主要就是一个递归的过程,一层一层下去直到找到的是一个文件再逐层返回。
以上,就是我学习linuxc第六章的一些笔记,觉得比较重要,容易出错的地方也很多,希望看到这篇博客的人如果觉得我有哪些地方写得不好或者出错了,能给我回复一下下,小女子感激不尽!
相关文章推荐
- Linux下信号的基本使用与分析
- [MAC][Linux]awk使用
- 每天一个linux命令(11):nl命令
- 使linux(ubuntu)服务器默认使用中文字符集zh_CN.UTF-8
- 什么是linux
- Linux显示文件之head/tail/nl
- Linux wc 命令
- Linux显示文件之more/less
- Linux kill命令
- 【linux高级程序设计】(第八章)进程管理与程序开发 2
- 1.7-linux启动流程
- Linux 下编译安装 PHP 5.6
- Linux显示文件命令之cat/tac
- Linux 使用core file文件快速定位程序崩溃代码行
- Linux常用命令之seq/rm
- Linux中断处理驱动设计
- linux删除文件未释放空间问题处理
- Linux命令:echo
- Linux命令:echo 分类: Ubuntu学习笔记 2015-07-26 21:29 61人阅读 评论(0) 收藏
- Linux内核驱动之自动创建设备文件