当前位置: 首页 > news >正文

嵌入式学习——Linux高级编程复习(目录IO、软硬连接、makefile)——day38

1. 目录IO

        目录IO是指在计算机程序中对文件目录进行操作的一系列输入输出功能。这些操作允许程序创建、读取、修改和删除目录结构。在Unix/Linux系统和类似系统中,目录被视为特殊的文件,可以对其进行打开、读取、写入(修改)和关闭等操作。

2. 目录IO相关函数接口

2.1 opendir

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6.注意

2.2 closedir

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6.注意

2.3 readdir

        1. 定义

        2. 功能

        3. 参数

    struct dirent {
       ino_t          d_ino;       /* Inode number */
       off_t          d_off;       /* Not an offset; see below */
       unsigned short d_reclen;    /* Length of this record */
       unsigned char  d_type;      /* Type of file; not supported
                                      by all filesystem types */
       char           d_name[256]; /* Null-terminated filename */
    };

        4. 返回值

        5. 示例程序

        6.注意

2.4  mkdir 

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6.注意

2.5  umaks 

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6.注意

2.6  rmdir 

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6.注意

2.7 getcwd

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6.注意

2.8 chdir

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6.注意

2.9 stat

        1. 定义

        2. 功能

        3. 参数

    struct stat {
       dev_t     st_dev;         /* ID of device containing file */
       ino_t     st_ino;         /* Inode number */
       mode_t    st_mode;        /* File type and mode */
       nlink_t   st_nlink;       /* Number of hard links */
       uid_t     st_uid;         /* User ID of owner */
       gid_t     st_gid;         /* Group ID of owner */
       dev_t     st_rdev;        /* Device ID (if special file) */
       off_t     st_size;        /* Total size, in bytes */
       blksize_t st_blksize;     /* Block size for filesystem I/O */
       blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */

       /* Since Linux 2.6, the kernel supports nanosecond
          precision for the following timestamp fields.
          For the details before Linux 2.6, see NOTES. */

       struct timespec st_atim;  /* Time of last access */
       struct timespec st_mtim;  /* Time of last modification */
       struct timespec st_ctim;  /* Time of last status change */

    #define st_atime st_atim.tv_sec      /* Backward compatibility */
    #define st_mtime st_mtim.tv_sec
    #define st_ctime st_ctim.tv_sec
    };

        4. 返回值

        5. 示例程序

        6.注意

2.10 getpwuid

        1. 定义

        2. 功能

        3. 参数

        struct passwd {
           char   *pw_name;       /* username */
           char   *pw_passwd;     /* user password */
           uid_t   pw_uid;        /* user ID */
           gid_t   pw_gid;        /* group ID */
           char   *pw_gecos;      /* user information */
           char   *pw_dir;        /* home directory */
           char   *pw_shell;      /* shell program */
        };

        4. 返回值

        5. 示例程序

        6.注意

2.11 getgrgid

        1. 定义

        2. 功能

        3. 参数

    struct group {
       char   *gr_name;        /* group name */
       char   *gr_passwd;      /* group password */
       gid_t   gr_gid;         /* group ID */
       char  **gr_mem;         /* NULL-terminated array of pointers
                                  to names of group members */
    };

        4. 返回值

        5. 示例程序

        6.注意

3. 链接文件

3.1 软链接文件(符号链接)

        ln -s 被链接文件 链接文件名
        通过文件名链接

3.2 硬链接文件

        ln 被链接文件 链接文件名

        通过文件在虚拟文件系统(VFS)中的inode节点链接

4. 链接文件函数接口

4.1 symlink(创建软链接)

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.2 link(创建硬链接)

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

4.3 lreadink

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

5. 工程管理工具

5.1 在文件夹下编写一个名为makefile的脚本文件

        makefile
        Makefile

5.2 语法规则

        要生成的文件:所有依赖的文件(中间以空格隔开)
            生成方式

5.3 执行步骤

        1.终端输入make
        2.make执行对应目录下的makefile文件
        3.生成makefile文件中第一个目标
        4.查找所有依赖的文件是否都存在
        5.如果存在则利用生成方式生成目标文件
    
    makefile内部维护一个时间戳

5.4 makefile变量

        $@:要生成的文件 
        $^:所有依赖的文件 
        $<:第一个依赖的文件
    
        =        直接赋值
        :=        覆盖赋值
        +=        原来的基础上新加
        ?=        前面没有给变量赋值,则给变量赋等号后的值
                        变量已经有值,不会给变量赋新值

        

http://www.lryc.cn/news/367173.html

相关文章:

  • makefile与进度条
  • 操作系统总结
  • SpringCloud整合OpenFeign实现微服务间的通信
  • 老师必备!一文教你如何高效收集志愿填报信息
  • 创建 MFC DLL-使用DEF文件
  • 如何将HTTP升级成HTTPS?既简单又免费的方法!
  • 数据仓库之核心模型与扩展模型分离
  • 大龄职场人的春招机遇:技术岗位主导,高薪与挑战并存
  • 家宽动态公网IP,使用docker+ddns 实现动态域名解析
  • 【力扣刷题 动态规划】LeetCode 139 单词拆分、LeetCode 300 最长递增子序列 ✌
  • 【位运算】【前缀和】个人练习-Leetcode-1177. Can Make Palindrome from Substring
  • 最小相位系统
  • css系列:进度条
  • QT中为程序加入超级管理员权限
  • 共识算法之争(PBFT,Raft,PoW,PoS,DPoS)
  • 抽象的java入门1.3.0
  • 【Oracle生产运维】表空间可用性告警排查处理
  • mac Network: use --host to expose
  • ChatGPT-4o体验demo
  • FPGA SPI采集ADC7606数据
  • html three.js 引入.stl模型示例
  • 从零手写实现 nginx-11-文件处理逻辑与 range 范围查询合并
  • Java算法-力扣leetcode-167. 两数之和 II - 输入有序数组
  • 实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)
  • 自定义类型:结构体+结构体内存对齐+结构体实现位段
  • 0109__strip(1) command
  • 英码科技推出鸿蒙边缘计算盒子:提升国产化水平,增强AI应用效能,保障数据安全
  • 从军事角度理解“战略与战术”
  • 最短路径——迪杰斯特拉与弗洛伊德算法
  • 6.7.11 一种新的迁移学习方法可提高乳房 X 线摄影筛查中乳腺癌的诊断率