文件函数说明
此为基础篇文件操作,主要以目录操作为主,涉及基础使用函数:
opendir、closedir、mkdir、telldir、seekdir、rewinddir、rmdir、rename、access、readdir函数说明。
相关函数说明:
opendir
函数说明: opendir
。
/*************头文件*****************/
#include <sys/types.h>
#include <dirent.h>
/*****************************
* 函数名称:opendir
* 函数入口:
* name:目录名称
* 函数出口:
* opendir()用来打开参数name 指定的目录, 并返回DIR*形态的目录流, 和open()类似, 接下来对目录的读取和搜索都要使用此返回值.
* 函数说明:
* 打开目录
* ***************************/
DIR *opendir(const char *name);
closedir
函数说明: closedir
。
/*************头文件*****************/
#include <sys/types.h>
#include <dirent.h>
/*****************************
* 函数名称:closedir
* 函数入口:
* name:目录名称
* 函数出口:
* 成功返回:0,失败返回-1
* 函数说明:
* 关闭目录流
* ***************************/
int closedir(DIR *dirp);
mkdir
函数说明: mkdir
。
/*************头文件*****************/
#include <sys/stat.h>
/*****************************
* 函数名称:mkdir
* 函数入口:
* path:目录名称
* mode:文件权限设置
* 函数出口:
* 成功返回:0,失败返回-1
* 函数说明:
* 创建目录
* 只能在已存在的目录创建下级目录
* 权限可设置为R(读4)-W(写2)-X(执行1)
* 例如设置0777:
* [所属用户设置权限][用户组设置权限][普通用户设置权限]
* 三者都将具备最大权限
* ***************************/
int mkdir(const char *path, mode_t mode);
/**********************mode方式:*****************/
S_IRWXU 00700权限,代表该文件所有者拥有读,写和执行操作的权限
S_IRUSR(S_IREAD) 00400权限,代表该文件所有者拥有可读的权限
S_IWUSR(S_IWRITE) 00200权限,代表该文件所有者拥有可写的权限
S_IXUSR(S_IEXEC) 00100权限,代表该文件所有者拥有执行的权限
S_IRWXG 00070权限,代表该文件用户组拥有读,写和执行操作的权限
S_IRGRP 00040权限,代表该文件用户组拥有可读的权限
S_IWGRP 00020权限,代表该文件用户组拥有可写的权限
S_IXGRP 00010权限,代表该文件用户组拥有执行的权限
S_IRWXO 00007权限,代表其他用户拥有读,写和执行操作的权限
S_IROTH 00004权限,代表其他用户拥有可读的权限
S_IWOTH 00002权限,代表其他用户拥有可写的权限
S_IXOTH 00001权限,代表其他用户拥有执行的权限
telldir
函数说明: telldir
。
/*************头文件*****************/
#include <dirent.h>
/*****************************
* 函数名称:telldir
* 函数入口:
* dirp: 文件流
* 函数出口:
* 成功返回当前目录流的位置,失败返回-1
* 函数说明:
* 获取当前文件流的位置
* ***************************/
long telldir(DIR *dirp);
seekdir
函数说明: seekdir
。
/*************头文件*****************/
#include <dirent.h>
/*****************************
* 函数名称:seekdir
* 函数入口:
* dirp: 文件流
* loc:偏移位置
* 函数出口:
* NULL
* 函数说明:
* 设置文件流的偏移位置
* ***************************/
void seekdir(DIR *dirp, long loc);
seekdir
函数说明: seekdir
。
/*************头文件*****************/
#include <sys/types.h>
#include <dirent.h>
/*****************************
* 函数名称:seekdir
* 函数入口:
* dirp: 文件流
* 函数出口:
* NULL
* 函数说明:
* 设置文件流偏移到首
* ***************************/
void rewinddir(DIR *dirp);
rmdir
函数说明: rmdir
。
/*************头文件*****************/
#include <unistd.h>
/*****************************
* 函数名称:rmdir
* 函数入口:
* path:删除目录路径
* 函数出口:
* 成功为0,错误返回-1
* 函数说明:
* 删除指定路径目录文件夹需要为空
* ***************************/
int rmdir(const char *path);
rmdir
函数说明: rmdir
。
/*************头文件*****************/
#include <stdio.h>
/*****************************
* 函数名称:rmdir
* 函数入口:
* old:旧路径名称
* new:新名称
* 函数出口:
* 成功为0,错误返回-1
* 函数说明:
* 重命名文件名
* ***************************/
int rename(const char *old, const char *new);
access
函数说明: access
。
/*************头文件*****************/
#include <unistd.h>
/*****************************
* 函数名称:access
* 函数入口:
* pathname:路径文件名
* mode:模式选择
* 函数出口:
* 成功返回:0,失败返回-1
* 函数说明:
* 判断文件基本属性
* ***************************/
int access(const char *pathname, int mode);
/**********mode属性*************/
R_OK:是否具有读权限
W_OK:是否具有可写权限
X_OK:是否具有可执行权限
F_OK:文件是否存在
readdir
函数说明: readdir
。
/*************头文件*****************/
#include <sys/types.h>
#include <dirent.h>
/*****************************
* 函数名称:readdir
* 函数入口:
* dir:目录句柄
* 函数出口:
* 返回结构体,具体解析如下
* 函数说明:
* 读取目录,返回目录一些属性信息合集
* ***************************/
struct dirent * readdir(DIR * dir);
/***********结构体补充**************/
struct dirent
{
ino_t d_ino; //d_ino 此目录进入点的inode
ff_t d_off; //d_off 目录文件开头至此目录进入点的位移
signed short int d_reclen; //d_reclen _name 的长度, 不包含NULL 字符
unsigned char d_type; //d_type d_name 所指的文件类型
har d_name[256]; //d_name 文件名
};
/**********d_ino说明***************/
enum
{
DT_UNKNOWN = 0, //未知类型
# define DT_UNKNOWN DT_UNKNOWN
DT_FIFO = 1, //管道
# define DT_FIFO DT_FIFO
DT_CHR = 2, //字符设备
# define DT_CHR DT_CHR
DT_DIR = 4, //目录
# define DT_DIR DT_DIR
DT_BLK = 6, //块设备
# define DT_BLK DT_BLK
DT_REG = 8, //常规文件
# define DT_REG DT_REG
DT_LNK = 10, //符号链接
# define DT_LNK DT_LNK
DT_SOCK = 12, //套接字
# define DT_SOCK DT_SOCK
DT_WHT = 14 //链接
# define DT_WHT DT_WHT
};
示例代码:
示例1:综合使用
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>
void main()
{
int i=0;
int ret;
char c[2]="1";
struct dirent *read_dir;
char namebuf[20]="./user";
while(i<4)//创建4个目录
{
strcat(namebuf,c);
printf("%s\r\n",namebuf);
ret =mkdir(namebuf,0777);
if(ret==-1)
{
perror("mkdir");
}
memset(namebuf, 0, 20);
strcpy(namebuf, "./user");
c[0]++;
i++;
}
DIR *opdir = opendir("./");
if(opendir==NULL )
{
perror("opendir");
}
printf("tell:%ld\r\n",telldir(opdir));//测试telldir及seekdir
seekdir(opdir,10);
printf("tell:%ld\r\n",telldir(opdir));
rewinddir(opdir);
while((read_dir=readdir(opdir))!=NULL)//测试遍历目录功能
{
printf("d_name:%s\r\n",read_dir->d_name);//文件名称
printf("inode:%ld\r\n",read_dir->d_ino);//inode号
printf("d_off:%ld\r\n",read_dir->d_off);//目录文件开头至次点的位移
printf("d_reclen:%hd\r\n",read_dir->d_reclen);//name长度
printf("d_type:%d\r\n",read_dir->d_type);//文件类型
printf("*******************************\r\n");
}
closedir(opdir);
ret=access("./user4",F_OK );//验证文件是否存在
if(ret==0)
{
printf("文件存在\r\n");
}
else
{
printf("文件不存在\r\n");
}
}
运行结果:
./user1
./user2
./user3
./user4
tell:0
tell:10
d_name:user1
inode:917508
d_off:2827814737922955406
d_reclen:32
d_type:4
*******************************
d_name:a.out
inode:917507
d_off:3266742914109918606
d_reclen:32
d_type:8
*******************************
d_name:user4
inode:918409
d_off:3645604893202158451
d_reclen:32
d_type:4
*******************************
d_name:test3.c
inode:918805
d_off:3660771261492802422
d_reclen:32
d_type:8
*******************************
d_name:.
inode:918801
d_off:4130976637031932112
d_reclen:24
d_type:4
*******************************
d_name:dttcp.c
inode:924807
d_off:4598755523635126908
d_reclen:32
d_type:8
*******************************
d_name:test2.c
inode:918951
d_off:6971843091510136432
d_reclen:32
d_type:8
*******************************
d_name:user3
inode:917754
d_off:7803386986888226586
d_reclen:32
d_type:4
*******************************
d_name:test1.c
inode:918804
d_off:7921507571561867689
d_reclen:32
d_type:8
*******************************
d_name:test5.c
inode:923969
d_off:8260533544634733690
d_reclen:32
d_type:8
*******************************
d_name:test4.c
inode:923935
d_off:8419845761346826035
d_reclen:32
d_type:8
*******************************
d_name:..
inode:524290
d_off:8576677908980905102
d_reclen:24
d_type:4
*******************************
d_name:user2
inode:917516
d_off:9223372036854775807
d_reclen:32
d_type:4
*******************************
文件存在
感谢阅读,欢迎批阅,后期或再次更新….