目 录 操 作
打开目录 ===》遍历目录 ===》切换目录 ===》关闭目录
opendir() ===>readdir()/chdir() ====>closedir()
头文件:
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
原型:DIR *opendir(const char *name);
功能: 从指定的name路径+目录名下打开该目录
参数: name 要打开的目录所在路径+目录名称
返回值:成功 目录流对象,DIR * 结构体指针
失败 NULL
原型:struct dirent *readdir(DIR *dirp);
功能:从已经打开的目录流对象drip中获取一个文件信息。
参数:dirp 已经打开的流对象
返回值: 成功 返回一个文 件结构体,重点是d_name 成员变量,表示文件名称。
失败或者目录流结尾 NULL
原型:int chdir(const char *path);
功能:将程序的执行目录修改为指定的path路径
参数:path 新的工作目录
返回值:成功 0
失败 -1
原型:int closedir(DIR *dirp);
功能:关闭指定的目录流对象
参数:dirp 要关闭的流对象
返回值: 成功 0
失败 -1;
注意:closedir 不能关闭多次,否则段错误。
2、文件属性操作 ===>stat 命令对应的 函数
头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
原型:int stat(const char *path, struct stat *buf);
功能:从指定的path路径+文件名称获取文件属性信息到buf对象中。
参数:path 要打开的文件路径+名称
buf 文件属性结构体
返回值:成功 0
失败 -1;
注意:如果要获取链接文件的属性信息用 lstat函数
如果文件已经被open函数打开,可用fstat函数获取其信息。
文件类型:
普通文件 -
目录文件 d
链接文件 l /dev/stdin
字符设备文件 c /dev/tty
块设备文件 b /dev/sda
套接子文件 s /dev/log
管道文件 p
用户信息获取:/etc/passwd =>id == name
1、getpwuid() ===>函数得到如下信息:
头文件: pwd.h
函数: getpwuid()
结构体: struct passwd *
2 用户组信息
struct group *getgrgid(gid_t gid);
文件的大小:
buf.st_size
3、时间函数 ===> time() localtime() asctime()
头文件:
#include <time.h>
原型:time_t time(time_t *t);
功能:获取当前系统时间与格林尼治时间之间的秒数。
参数:t 要获取的时间结构体,如果是NULL 则表示默认当前时间。
如果是变量则在变量中存储秒数。
返回值:如果参数是NULL ,则用该返回值表示获取的秒数/
如果参数不是NULL,则一般用参数获取秒数/
原型:struct tm *localtime(const time_t *timep);
功能:将指定的timep秒数的数据值转换成struct tm 类型的时间结构体。
参数:timep 之前通过time函数或已知的时间秒数。
返回值:成功 时间结构体
失败 NULL
原型:char *asctime(const struct tm *tm);
功能:将指定的时间结构体直接转换成时间字符串。
参数: tm 经过localtime 函数转换的结构
返回值:成功 最终地时间结构体
失败 NULL
练习: 综合以上知识点,完成如下功能:
设计一个程序,可以通过住函数传参的方式打印输出该文件的
所有属性信息,如果该文件是目录则输出目录中包含的文件属性信息。
比如:
./a.out abc ===>普通文件abc的属性信息输出
./a.out ./ ===>当前目录的所有文件属性信息遍历输出。
4、IO 总结
源码方式安装软件:
1、下载源码包 xxx.tar xxx.tar.gz
2、解压缩 tar -xvf xxx.tar tar -zxvf xxx.tar.gz
3、切换目录 cd xxxx
4、配置环境 ./configure
5、生成可执行程序 make
6、安装 make install
ctags 的使用:
1、进入系统目录 cd /usr/include
2、生成tags文件 ctags -R *
3、在当前目录中追查变量或者结构体
vi -t xxx
4、 如果定位的结果已经显示的是基本数据类型,则表示追踪截至。
如果第一次没有定位到变量的基本数据类型,则用ctrl+] 向下追查
要求光标必须在要追查的类型的原始定义处。
如果要向后回退则用ctrl+t 回退一次。
5、用 :q 退出vi