1.目录操作API函数
1.DIR *opendir(const char * name)
函数作用:打开一个目录
参数:目录路径
返回值:成功返回DIR*指针,失败返回NULL
2.struct dirent *readdir(DIR *)
函数作用:读取目录
参数:DIR *指针
返回值:返回结构体指针struct dirent*
struct
{
ino_t d_ino; 文件节点
ff_t d_off; 偏移量
signed short int d_reclen 长度
unsigned char d_type; 文件类型
har d_name[256]; 目录下的文件名
}
int stat(const char * file_name,struct stat *buf);
函数作用:查询文件信息
参数:目录名称
struct stat *buf:信息结构体
struct stat
{
dev_t st_dev; /*device*/文件的设备编号
ino_t st_ino; /*inode*/文件节点
mode_t st_mode; /*protection*/权限/文件类型
nlink_t st_nlink; /*number of hard links */链接数
uid_t st_uid; /*user ID of owner*/ 用户ID 0 root 1 普通用户1
gid_t st_gid; /*group ID of owner*/ 用户组号 0 root 1
dev_t st_rdev; /*device type */ 若此文件为装置设备文件,则为其设备编号
off_t st_size; /*total size, in bytes*/ 文件大小(字节)
unsigned long st_blksize; /*blocksize for filesystem I/O */ //文件系统的 I/O 缓冲区大小
unsigned long st_blocks; /*number of blocks allocated*/ 占用文件区块的个数,每一区块大小为 512 个字节。
time_t st_atime; /* time of lastaccess*/ 文件最近一次被存取或被执行的时间;
time_t st_mtime; /* time of last modification */ 最后修改时间
time_t st_ctime; /* time of last change */ 最近一次被更改的时间,此参数会在文件所有者、组、权限被更改时更
};
返回值:成功返回0,失败返回-1
带参宏 无参宏 宏描述
S_ISLNK(mode) S_ISLNK 判断是否为链接文件类型
S_ISREG(mode) S_ISREG 判断是否为普通文件类型
S_ISDIR(mode) S_ISDIR 判断是否为目录类型
S_ISCHR(mode) S_ISCHR 判断是否为字符型设备类型
S_ISBLK(mode) S_ISBLK 判断是否为块设备类型
S_ISFIFO(mode) S_ISFIFO 判断是否为命名管道类型
S_ISSOCK(mode) S_ISSOCK 判断是否为套接字类型
如何使用呢:
(1)用带参宏
S_ISREG(file_info.st_mode)
(2)用相&
file_info.st_mode & S_ISREG == 1?
注意:图片12-15BIT是用的S_IFxx,请使用S_ISxx
4.(1)int fstat(int fds,struct stat *buf)适用于文件IO获取属性参数
(2)int lstat(const char *path,struct stat *buf):适用于获取链接文件属性
(3)int stat(const char * file_name,struct stat *buf);获取标准IO属性参数
lstat”和“stat”的区别为,当获取一个链接文件的属性时,使用“stat”获取的为链接指向文件的属性,使用“lstat”获取的为链接文件的属性。因此它是有本事处理符号(软)链接文件的因此它是有本事处理符号链接文件的简单的说文件是符号链接,stat才能处理。而lstat可以检测是否是符号链接
5.int mkdir(const char *pathname, mode_t mode); 创建目录
6.int rmdir(const char *pathname); 删除目录
2.时间编程
1) date:打印当前的系统时间
2) date -s 20190616:修改日期
3) date -s "20190616 10:39:10":修改日期&&时间
1.time_t time(time_t *t);
获取秒数,如果 t 并非空指针的话,此函数也会将返回值存到 t 指针所指的内存; & NULL返回值:成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于 errno中。
示例:printf("当前秒数%ld\n",time(NULL));
2.获取格林威治时间期(加8小时是背景时间)
示例:
struct tm * p = gmtime(&info);
printf("日期:%d-%d-%d 时间:%d:%d:%d\n",1900+p->tm_year,p->tm_mon+1,p- >tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
3.获取当地时间
示例:
time_t info = time(NULL);
struct tm * p = localtime(&info);
printf("日期:%d-%d-%d 时间:%d:%d:%d\n",1900+p->tm_year,p->tm_mon+1,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
3.附st_mode具体参数