C语言文件操作笔记-4

文件函数说明

此为基础篇文件操作,主要以目录操作为主,涉及基础使用函数:
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
*******************************
文件存在

感谢阅读,欢迎批阅,后期或再次更新….

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值