• 文件、目录操作相关函数


    一。文件操作函数

    1.stat函数

    1.1 stat记录了文件的信息

    1.2 st_mode由16位二进制数组成,如下图:

    下图表示各种文件类型对应的8进制数,将st_mode&0170000可以得到文件类型,若要判断一个文件是不是普通文件:

    struct stat st;

    stat("123.txt",&st);

    if((st.st_mode&S_IFMT)==S_IFREG)

    {

    printf(“这是普通文件”);

    }

     1.3计算文件的权限类型如下图:

     另外可以参考:https://blog.csdn.net/astrotycoon/article/details/8679676

    2.lstat函数

    3.chmod

    4.chown

    uid和gid在vi /etc/passwd中可以查看

    5.truncate

    6.link

    7.rename

    8.dup dup2 

    用来复制文件描述符 

    函数原型:

    1.dup将oldfd复制为最小可用的文件描述符,并返回

    示例程序:通过fd和ret文件描述符都可以往文件a.txt中写数据,并且文件指针不会还原。

    2.dup2将oldfd复制为newfd

    示例程序:将原本“english.txt”的文件描述符fd复制为fd1,即a.txt的文件描述符,并往a.txt中写数据

    9.fcntl

    cmd传入F_GETFL时获取文件状态,arg=0;

    cmd传入F_SETFL时设置文件状态,arg=flag;

    二.目录操作函数

    1.chdir 和 getcwd 

    2.mkdir 和 rmdir 

    3.opendir

    4.readdir

    //递归读取子目录并计算普通文件个数
    #include<stdio.h> #include<stdlib.h> #include<dirent> int getFileNum(const char *filename) { DIR *dir=NULL; dir=opendir(filename); struct dirent* ptr=NULL; if(dir==NULL) { perror("opendir"); exit(1); } char path[1024]={0}; while((ptr=readdir(dir))!=null) { //过滤.和.. if(strcmp(ptr->d_name,".")==0||strcmp(ptr->d_name,"..")==0) { continue; } //如果是目录 if(ptr->d_type==DT_DIR) { sprintf(path,"%s%s",filename,ptr->d_name); //递归读目录 total+=getFileNum(path); } //如果是普通文件 if(ptr->d_type==DT_REG) { total++; } } closedir(dir); return total; } int main(int argc,char* argv[]) { int total=getFileNum(argv[1]); printf("%s has file numbers %d",argv[1],total); return 0; }

      

    5.closedir

  • 相关阅读:
    【转】JVM 堆内存设置原理
    【转】Java八种基本数据类型的比较及其相互转化
    8月12日
    并发与竞争
    高通gpio配置输出
    创建一个字符设备的基本流程
    4月2号 字符设备驱动实验
    3.30学习遇到卡死点
    断言函数的用法
    12.02 下午
  • 原文地址:https://www.cnblogs.com/sclu/p/11246003.html
Copyright © 2020-2023  润新知