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

LinuxC编程——高级文件操作

目录

  • 一、查询文件信息
    • 1、stat
    • 2、stat fstat lstat区别
  • 二、目录操作
    • 2.1 opendir
    • 2.2 readdir
    • 2.3 closedir
    • 练习:实现ls操作
  • 三、库
    • 3.1 库的定义
    • 3.2 库的分类
      • 3.2.1 静态库
      • 3.2.2 动态库
    • 3.3 创建库
      • 3.3.1 静态库制作
      • 3.3.2 动态库制作

一、查询文件信息

1、stat

int stat(const char *path, struct stat *buf);

  • 功能:获取文件属性
  • 参数
    • path:文件路径名
    • buf:保存文件属性信息的结构体
  • 返回值
    • 成功:0
    • 失败:-1

结构体

	struct stat {dev_t     st_dev;         /* 设备包含文件ID */ino_t     st_ino;     /* inode号 */mode_t    st_mode;    /* 文件类型和权限 */nlink_t   st_nlink;   /* 硬链接数 */uid_t     st_uid;     /* 用户ID */gid_t     st_gid;     /* 组ID */off_t     st_size;    /* 大小 */dev_t     st_rdev;        /* 设备ID */time_t    st_atime;   /* 最后访问时间 */time_t    st_mtime;   /* 最后修改时间 */time_t    st_ctime;  /* 最后状态改变时间 */
};

练习
实现ls -l filename
(1) 获取文件属性

  • 方法一
    在这里插入图片描述

(2) 获取文件权限

  • 方法一
    在这里插入图片描述

  • 方法二
    在这里插入图片描述

(3) 获取文件链接数
在这里插入图片描述

(4) 获取用户名和组名
在这里插入图片描述

(5) 获取文件大小
在这里插入图片描述

(6) 获取文件上次修改时间
在这里插入图片描述
其中,st.st_mtime返回一个结构体,ctime返回时间的字符串
%.12s表示显示12位字符串

2、stat fstat lstat区别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、目录操作

2.1 opendir

DIR *opendir(const char *name);

  • 功能:获得目录流
  • 参数:要打开的目录
  • 返回值:
    • 成功:目录流
    • 失败:NULL

2.2 readdir

struct dirent *readdir(DIR *dirp);

  • 功能:读目录
  • 参数:要读的目录流
  • 返回值:
    • 成功:读到的信息
    • 失败:NULL,设置errno号

返回值为结构体,该结构体成员为描述该目录下的文件信息

dirent结构体

struct dirent {ino_t   d_ino;                   /* 索引节点号*/off_t   d_off;               /*在目录文件中的偏移*/unsigned short d_reclen;    /* 文件名长度*/unsigned char  d_type;      /* 文件类型 */char    d_name[256];      /* 文件名 */
};

2.3 closedir

int closedir(DIR *dirp);

  • 功能:关闭目录
  • 参数:dirp:目录流

在这里插入图片描述

练习:实现ls操作

在这里插入图片描述

三、库

3.1 库的定义

当使用别人的函数时除了包含头文件以外还要有库

  • 头文件:函数声明、结构体等类型定义、头文件、宏定义
  • 库:就是把一些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用;本质上来说库是一种可执行代码的二进制形式

由于windows和linux的本质不同,因此二者库的二进制是不兼容的

3.2 库的分类

3.2.1 静态库

静态库在程序编译时会被连接到目标代码中。

优缺点

  • 优点:
    程序运行时将不再需要该静态库;
    运行时无需加载库,运行速度更快
  • 缺点:
    静态库中的代码复制到了程序中,因此体积较大;
    静态库升级后,程序需要重新编译链接

3.2.2 动态库

动态库是在程序运行时才被载入代码中
优缺点

  • 优点:
    程序在执行时加载动态库,代码体积小;
    程序升级更简单;
    不同应用程序如果调用相同的库,那么在内存里
    只需要有一份该共享库的实例。
  • 缺点:
    运行时还需要动态库的存在,移植性较差
    静态库和动态库,本质区别是代码被载入时刻不同。

3.3 创建库

3.3.1 静态库制作

  1. 将源文件编译生成目标文件:
    gcc -c xxx.c -o xxx.o
  2. 创建静态库用ar命令,它将很多.o转换成.a:
    ar crs libxxx.a xxx.o
  3. 测试使用静态库
    gcc xxx.c -L指定库的路径 -l指定库名


在这里插入图片描述

3.3.2 动态库制作

  1. 我们用gcc来创建共享库(两条命令)
    gcc -fPIC -c xxx.c -o xxx.o
    gcc -shared -o libxxx.so xxx.o
  2. 测试动态库使用
    gcc xxx.c -L路径 -l库名
    在这里插入图片描述
    👉上面错误的解决方法
  • (1) 把库拷贝到/usr/lib和/lib目录下。(此方法编译时不需要指定库的路径)

  • (2) 在LD_LIBRARY_PATH环境变量中加上库所在路径。
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
    (终端关闭,环境变量就没在了)
    在这里插入图片描述

  • (3) 添加/etc/ld.so.conf.d/.conf文件。把库所在的路径加到文件末尾,并执行ldconfig刷新
    sudo vi /etc/ld.so.conf.d/
    .conf
    在这里插入图片描述
    在这里插入图片描述

相关文章:

LinuxC编程——高级文件操作

目录 一、查询文件信息1、stat2、stat fstat lstat区别 二、目录操作2.1 opendir2.2 readdir2.3 closedir例练习:实现ls操作 三、库3.1 库的定义3.2 库的分类3.2.1 静态库3.2.2 动态库 3.3 创建库3.3.1 静态库制作3.3.2 动态库制作 一、查询文件信息 1、stat int …...

【基础知识整理】图的基本概念 邻接矩阵 邻接表

一、图概述 定义: 图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的; 其中,点通常被成为"顶点(vertex)“,而点与点之间的连线则被成为"边或弧”(edege)。 通常记为,G(V,E)。 图是一种重要的…...

5.程序控制结构|Java学习笔记

文章目录 程序流程控制介绍顺序控制分支控制分支控制if elseswitch分支结构 循环控制for循环控制while循环控制do...while循环控制跳转控制语句breakcontinuereturn 程序流程控制介绍 顺序控制分支控制循环控制 顺序控制 程序从上到下逐行地执行,中间没有任何判断…...

【最优PID 整定】PID性能指标(ISE,IAE,ITSE和ITAE)优化、稳定性裕量(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Linux内核中断和Linux内核定时器

目录 Linux内核中断 Linux内核定时器 Linux内核中断 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev) 功能:注册中断 参数: irq : 软中断号 gpio的软中断号 软中断号 gpio_to_i…...

OMG--IDL(Interface Definition Language)

OMG--IDL(Interface Definition Language) 1 概述2 内容缩写IDL 语法和语义概述词法约定ISO Latin-1的字母字符如下表十进制数字字符图形字符格式化字符Tokens注释标识符冲突规则转义标识符关键字IDL识别的其他字符字面量 预处理IDL 语法构建块核心数据类…...

英语学习:M开头

machine 机器 mad 发疯的,生气的 madam 女士,夫人 madame 夫人 magazine 杂志 magic 有魔力的 maid 女仆,侍女 mail 邮递 mailbox 邮箱 mainland 大陆 major 较大的,主要的 majority 大多数 male 雄的 man 人类 man…...

【计算机组成原理与体系结构】控制器

目录 一、CPU的功能与基本结构 二、指令周期的数据流 三、数据通路 四、硬布线控制器 五、微程序控制器 六、微指令 一、CPU的功能与基本结构 运算器基本结构 控制器基本结构 CPU的基本结构 二、指令周期的数据流 取址周期 间址周期 中断周期 指令周期流程 三、数据通路 …...

结构化命令

章节目录: 一、使用 if-then 语句二、if-then-else 语句三、嵌套 if 语句四、test 命令4.1 数值比较4.2 字符串比较4.3 文件比较 五、复合条件测试六、if-then 的高级特性6.1 使用单括号6.2 使用双括号6.3 使用双方括号 七、case 命令八、结束语 本章内容&#xff1…...

Java Web实训项目:西蒙购物网

文章目录 一、创建数据库和表1、创建数据库2、创建用户表3、创建类别表4、创建商品表5、创建订单表 二、创建Simonshop项目1、创建web项目2、修改Artifacts名称:simonshop3、重新部署项目4、编辑首页5、启动应用,查看效果 三、创建实体类1、用户实体类2、…...

ChatGPT Prompt 提示词设计技巧必知必会

本文内容整理自图灵社区直播《朱立成:ChatGPT Prompt提示词技巧必知必会》。 朱立成,图灵社区《ChatGPT即学即用》视频课程作者,软件工程师,对新事物充满好奇,关注ChatGPT应用。2001年毕业于浙江大学,从事软…...

尚硅谷-云尚办公-项目复盘

尚硅谷-云尚办公-项目复盘 资料地址本文介绍问题汇总问题1.knife4j无法下载 视频4问题2.dev等含义 视频5问题3.wrapper继承/实现图 视频8问题4.修改统一返回结果 视频11问题5.修改后新增也变修改 视频29问题6.redis中key值乱码 视频55-60问题7.RangeError: Maximum call stack …...

nacos升级到2.0.3(单机模式)

前提&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud AlibabaSpring CloudSpring BootNacos2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE2.0.3 一、pom.xml文件 <parent><groupId>org.springframework.boot&…...

Koa学习3:用户添加、错误处理

模型 在src目录下创建model目录&#xff0c;用来存放模型 创建用户模型 user.model.js 注意&#xff1a; UUID类型是无法自增的&#xff0c;将id设置为UUID类型时只需要为其指定默认值即可 // 数据类型 const { DataTypes } require(sequelize); // 导入已经连接了数据库…...

网络安全入门学习第十五课——PHP基础

文章目录 一、WEB技术1、什么是web2、B/S架构3、C/S架构 二、PHP概述1、PHP是什么2、PHP受欢迎的原因3、基于MVC模式的PHP框架4、常用编译工具5、PHP环境搭建6、开发工具 三、PHP基本语法格式1、标记2、输出语句3、注释4、标识符 四、数据与运算1、常量1.1、常量定义1.2、预定义…...

电子科技大学 数学专业-功不唐捐,玉汝于成

电子科技大学 数学专业 功不唐捐&#xff0c;玉汝于成 1.本科背景 本科是坐落于湖南湘潭的湖南科技大学&#xff0c;专业为网络工程专业&#xff0c;因热爱数学专业&#xff0c;所以决定跨考数学专业。 本科专业课平均成绩85&#xff0c;排名10/104。CET 4 474分&#xff0c;…...

Android10.0 iptables用IOemNetd实现删除子链功能的实现

1.前言 在10.0的系统rom定制化开发中,在system中netd网络这块的产品需要中,会要求设置屏蔽ip地址之内的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现删除创建子链的相关功能 2. iptables用IOemNetd实现删除创建子链功能的实现的核心类 syste…...

OpenGL光照之光照贴图

文章目录 漫反射贴图镜面光贴图放射光贴图代码 每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观&#xff0c;但是这仍不能对一个物体的视觉输出提供足够多的灵活性。 我们将整个物体的材质定义为一个…...

2018~2019 学年第二学期《信息安全》考试试题(B 卷)

北京信息科技大学 2018 ~2019 学年第 2 学期 《信息安全》课程期末考试试卷 B 课程所在学院:计算机学院 适用专业班级:计科 1601-06&#xff0c;重修 考试形式:(闭卷) 一. 选择题(本题满分 10 分&#xff0c;共含 10 道小题&#xff0c;每小题 1 分) 网络中存在的安全漏洞主…...

LeetCode-C#-0002.两数相加

0.声明 该题目来源于LeetCode 如有侵权&#xff0c;立马删除。 解法不唯一&#xff0c;如有新解法可一同讨论。 1.题目 0002两数相加 给你两个非空的链表&#xff0c;表示两个非负的整数&#xff0c;它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...

从0开始学习R语言--Day17--Cox回归

Cox回归 在用医疗数据作分析时&#xff0c;最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据&#xff0c;往往会有很多的协变量&#xff0c;即使我们通过计算来减少指标对结果的影响&#xff0c;我们的数据中依然会有很多的协变量&#xff0c;且…...

GC1808:高性能音频ADC的卓越之选

在音频处理领域&#xff0c;高质量的音频模数转换器&#xff08;ADC&#xff09;是实现精准音频数字化的关键。GC1808&#xff0c;一款96kHz、24bit立体声音频ADC&#xff0c;以其卓越的性能和高性价比脱颖而出&#xff0c;成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...