当前位置: 首页 > 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变量

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

        

相关文章:

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

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

makefile与进度条

Linux项目自动化构建工具-make/makefile make是一个命令&#xff0c; makefile是一个文件&#xff0c;保存依赖关系和依赖方法。‘ touch Makefile/makefile mybin:mytest.c//依赖关系 目标文件&#xff1a;依赖文件列表 文件列表的文件之间以空格分隔 gcc -o mybin mytest.…...

操作系统总结

进程和线程的区别 本质区别&#xff1a; 进程是资源调度以及分配的基本单位。线程是 CPU 调度的基本单位。 所属关系&#xff1a;一个线程属于一个进程&#xff0c;一个进程可以拥有多个线程。地址空间&#xff1a; 进程有独立的虚拟地址空间。线程没有独立的虚拟地址空间&…...

SpringCloud整合OpenFeign实现微服务间的通信

1. 前言 1.1 为什么要使用OpenFeign&#xff1f; 虽说RestTemplate 对HTTP封装后, 已经⽐直接使⽤HTTPClient简单⽅便很多, 但是还存在⼀些问题. 需要拼接URL, 灵活性⾼, 但是封装臃肿, URL复杂时, 容易出错. 代码可读性差, ⻛格不统⼀。 1.2 介绍一下微服务之间的通信方式 微…...

老师必备!一文教你如何高效收集志愿填报信息

高考志愿填报季&#xff0c;对于每一位老师来说&#xff0c;无疑是一场信息收集与管理的硬仗。如何在众多的志愿信息中&#xff0c;高效、准确地掌握每位学生的志愿意向&#xff1f; 高考志愿填报的重要性。不仅是学生人生的一个重要转折点&#xff0c;也是老师教育生涯中的一次…...

创建 MFC DLL-使用DEF文件

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 利用“MFC动态链接库”项目模板可以创建MFC DLL。DLL文件与可执行文件非常相似&#xff0c;不同点在于DLL包含有导出表(Export Table)。导出表包含DLL中每个导出函数的名字…...

如何将HTTP升级成HTTPS?既简单又免费的方法!

在当今数字化时代&#xff0c;网络安全已成为用户和企业关注的焦点。HTTPS作为一种更加安全的网络通信协议&#xff0c;正逐渐取代传统的HTTP成为新的标准。对于许多网站管理员和内容创作者来说&#xff0c;如何免费升级到HTTPS是一个值得探讨的问题。本文将详细介绍一些免费的…...

数据仓库之核心模型与扩展模型分离

在数据仓库的设计和实施过程中&#xff0c;核心模型与扩展模型分离是一种常见的策略&#xff0c;旨在提高数据仓库的灵活性、可维护性和扩展性。这种分离策略的主要优势和实施方法如下&#xff1a; 核心模型&#xff08;Core Model&#xff09; 核心模型是数据仓库中稳定、共…...

大龄职场人的春招机遇:技术岗位主导,高薪与挑战并存

随着6月毕业季的临近&#xff0c;大批年轻人即将涌入人才市场&#xff0c;为职场注入新鲜血液。然而&#xff0c;这也意味着一些职场人可能面临被“优化”的风险。近几年&#xff0c;职场环境呈现出明显的年轻化趋势&#xff0c;企业更倾向于招聘具有创新活力的青年人才&#x…...

家宽动态公网IP,使用docker+ddns 实现动态域名解析

官方地址&#xff1a;https://github.com/jeessy2/ddns-go 安装docker docker pull jeessy/ddns-godocker run -d --name ddns-go --restartalways --nethost -v /opt/ddns-go:/root jeessy/ddns-go然后访问ip端口 配置时注意如下...

【力扣刷题 动态规划】LeetCode 139 单词拆分、LeetCode 300 最长递增子序列 ✌

文章目录 1. 单词拆分2. 最长递增子序列 1. 单词拆分 题目链接 &#x1f34e; 解题思路&#xff1a; class Solution {bool dp[310] {false};public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> myset;for(auto& str :…...

【位运算】【前缀和】个人练习-Leetcode-1177. Can Make Palindrome from Substring

题目链接&#xff1a;https://leetcode.cn/problems/can-make-palindrome-from-substring/description/ 题目大意&#xff1a;给出一个字符串s&#xff0c;每次query给出l, r, k&#xff0c;要求判断子串s[l:r1]在经过k次操作后是否能变为回文串。一次操作可以将子串内的一个字…...

最小相位系统

最小相位系统 1、传递函数 一个线性系统的响应。 比如一个RC低通滤波器&#xff1a; 交流分量在电容的充放电中被滤除掉&#xff0c;通过设置电容器的电容值&#xff0c;以及电阻值&#xff0c;能够控制这种滤除能力&#xff0c;这个参数为RC。 电容的电抗为 1 / j w C 1/j…...

css系列:进度条

前言 技术来源于需求&#xff0c;近期遇到了做语音的需求&#xff0c;有个调整语速和音量的进度条&#xff0c;UI组件库的进度条大部分不支持拖动和点击修改当前进度&#xff0c;所以自己手写了一个。 实现思路 MDN文档介绍 <input type"range"> - HTML&am…...

QT中为程序加入超级管理员权限

QT中为程序加入超级管理员权限 Chapter1 QT中为程序加入超级管理员权限1. mingw编译器2. MSVC编译器3. CMAKE Chapter2 如何给QT程序添加管理员权限(UAC)的几种方法1、Qt Creator中方案一&#xff1a;&#xff08;仅适用于使用msvc编译器&#xff09;方案二&#xff1a;&#x…...

共识算法之争(PBFT,Raft,PoW,PoS,DPoS)

文章目录 共识算法拜占庭容错技术&#xff08;Byzantine Fault Tolerance&#xff0c;BFT&#xff09;PBFT&#xff1a;Practical Byzantine Fault Tolerance&#xff0c;实用拜占庭容错算法Raft协议POW(Proof of Work)工作量证明机制POSDPoS&#xff08;Delegated Proof of St…...

抽象的java入门1.3.0

前言&#xff1a; 在1.2.0版本中我们介绍了public class hello {}并从中提取出两个新概 修饰符和作用域 public class hello {public static void main(String[] args) {System.out.println("Hello World");} } 正片&#xff1a; 这一期把剩余的内容刨析出来 pub…...

【Oracle生产运维】表空间可用性告警排查处理

1 前言 在生产环境中&#xff0c;一般设置表空间告警阈值是90%&#xff0c;在接到监控报警后&#xff0c;并不是需要立刻对表空间进行扩容。 决定是否扩容主要看表空间最近的增量是多少&#xff0c;假如剩余10%的空间还能支持1个月的增量&#xff0c;那就不需要急着扩容。如果…...

mac Network: use --host to expose

本地启动无法访问&#xff0c;这个不是权限问题是mac 主机端口安全策略&#xff0c;现在我们只需要开启端口自动检测就可以 npm run dev --host 网络&#xff1a;未暴露 方案一 1、执行 npm run dev -- --host 方案二 1、请在 vite.config.js server: {host: true } 1…...

ChatGPT-4o体验demo

OpenAI 最近推出了其最新的人工智能语言模型——GPT-4O。该模型是在原有 GPT-4 的基础上进行优化而成&#xff0c;旨在提升生成质量和响应速度。GPT-4O 采用了更加高效的架构设计&#xff0c;使其在处理复杂文本时表现出更快的速度和更高的准确性。GPT-4O 在训练过程中融入了最…...

ARM链接器命令行选项优化与实战技巧

1. ARM链接器命令行选项深度解析 在嵌入式开发领域&#xff0c;ARM链接器(armlink)作为工具链的关键组件&#xff0c;承担着将多个目标文件合并为可执行程序的重任。不同于简单的文件拼接&#xff0c;现代链接器提供了数十种精细控制选项&#xff0c;能够深度优化代码布局、调试…...

Ubuntu 20.04虚拟机重启后断网?别慌,用Netplan配置静态IP一劳永逸(附避坑指南)

Ubuntu 20.04虚拟机网络配置终极指南&#xff1a;Netplan静态IP与持久化方案 当你兴奋地启动Ubuntu 20.04虚拟机准备大展身手时&#xff0c;突然发现网络连接消失了——这不是个别现象。许多开发者在本地虚拟化环境或云平台中都遭遇过类似困扰。本文将彻底解决这个"幽灵断…...

本地AI网关实战:统一管理多模型服务,实现智能路由与成本控制

1. 项目概述&#xff1a;一个本地化的AI网关如果你正在同时使用多个AI模型服务商&#xff0c;比如OpenAI、Anthropic、Google Gemini&#xff0c;或者还在本地运行着Ollama、vLLM这样的模型&#xff0c;那你一定体会过那种切换的繁琐。每个客户端、每个脚本都要配置不同的API密…...

Wireshark 命令行实战指南 ———— 自动化抓包与高效分析

1. 为什么需要Wireshark命令行模式 很多网络工程师第一次接触Wireshark时&#xff0c;都是通过图形界面进行操作。鼠标点点就能开始抓包&#xff0c;确实很方便。但当你需要处理以下场景时&#xff0c;图形界面就显得力不从心了&#xff1a; 服务器环境没有图形界面&#xff0c…...

北京数据恢复公司排名哪家好

在当今数字化时代&#xff0c;数据的重要性不言而喻。无论是个人用户的珍贵照片、文档&#xff0c;还是企业的重要业务数据&#xff0c;一旦丢失都可能造成巨大的损失。在北京&#xff0c;有众多的数据恢复公司&#xff0c;如何选择一家靠谱的公司成为了许多人关心的问题。下面…...

全栈AI智能体开发实战:基于LangGraph与Next.js的工程化模板解析

1. 项目概述&#xff1a;一个全栈AI智能体模板的诞生 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫 vstorm-co/full-stack-ai-agent-template 。光看名字&#xff0c;你可能会觉得这又是一个“AI全栈”的缝合怪&#xff0c;或者是一个过度包装的概念。但作为一个在AI…...

魔兽争霸3终极优化指南:12个免费插件让你的经典游戏焕发新生

魔兽争霸3终极优化指南&#xff1a;12个免费插件让你的经典游戏焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上…...

如何快速掌握雀魂Mod Plus:解锁全角色皮肤的新手完全指南

如何快速掌握雀魂Mod Plus&#xff1a;解锁全角色皮肤的新手完全指南 【免费下载链接】majsoul_mod_plus 雀魂解锁全角色、皮肤、装扮等&#xff0c;支持全部服务器。 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_mod_plus 还在为无法获得心仪角色和皮肤而烦恼…...

Gemini自动生成PPT实战手册:从零输入到专业演示文稿,3步完成95%的幻灯片工作流

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini自动生成PPT的核心原理与能力边界 Gemini 生成 PPT 的本质并非传统模板填充&#xff0c;而是基于多模态理解与结构化内容重构的端到端推理过程。其核心依赖于对用户输入&#xff08;文本、大纲、…...

工业物联网长距离蓝牙环境监测方案解析

1. 项目概述在工业物联网和远程环境监测领域&#xff0c;如何实现低功耗、长距离的数据传输一直是个技术难点。传统蓝牙技术受限于通信距离&#xff08;通常10米以内&#xff09;&#xff0c;而Wi-Fi方案又面临功耗过高的问题。最近我在一个工厂环境监测项目中&#xff0c;成功…...