目录操作(opendir,stat)、静态库、动态库

server/2025/1/12 23:38:06/

一、目录操作函数

opendir
函数原型:DIR *opendir(const char *name);
函数参数:name:目录名
返回值:返回一个指向该目录操作的流指针
readdir
函数原型:struct dirent *readdir(DIR *dirp);
函数参数:dirp:目录流指针
返回值:返回结构体指针,读取完毕返回NULLstruct dirent {ino_t          d_ino;       /* 索引节点号 */off_t          d_off;       /* 在目录文件中的偏移 */unsigned short d_reclen;    /* 文件名长度 */unsigned char  d_type;      /* 文件类型 */char           d_name[256]; /* 文件名 */};
closedir
int closedir(DIR *dirp);

打开当前目录下的所有文件:
在这里插入图片描述
通过opendir代开一个目录的绝对路径,随后readdir函数不断获取下一个目录项,如果返回的结构体类型指针为NULL时说明已经读取完目录中的所有相然后输出

stat
函数原型:int stat(const char *pathname, struct stat *statbuf);
函数参数:pathnam:文件路径statbuf:文件属性结构体
返回值:成功返回0,失败返回-1struct 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 */dev_t     st_rdev;        /* 设备号 */off_t     st_size;        /* 文件大小 */blksize_t st_blksize;     /* 文件存储的块大小 */blkcnt_t  st_blocks;      /* 文件所占块数*/struct timespec st_atim;  /* 最后访问的时间 */struct timespec st_mtim;  /* 最后修改的时间 */struct timespec st_ctim;  /* 最后改变状态的时间 */#define st_atime st_atim.tv_sec  #define st_mtime st_mtim.tv_sec#define st_ctime st_ctim.tv_sec};

getpwuid

getgrgid

利用目录函数实现ls-l的效果
默认为当前目录并打开它,返回一个目录流指针赋值给dp
在这里插入图片描述
man 7 inode查找宏函数
在这里插入图片描述
查看当前文件下的字目录的权限需要写9个
在这里插入图片描述

在这里插入图片描述

二、静态库

优点:程序在运行时与函数库再无瓜葛,移植方便

缺点:浪费空间和资源,因为所有相关的对象文件与牵涉到的函数库被链接合成一个可执行文件

制作静态库

1.将.c文件编译成.o文件 gcc -c *.c

2.将.o文件做成静态库 ar crs lib库名.a *.o

使用静态库

gcc main.c -L库路径 -l库名
在这里插入图片描述
在这里插入图片描述
先分别定义两个.c .h文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

制作动态库

1.将.c文件编译成.o文件 gcc -fPIC -Wall -c *.c

2.将.o文件做成动态库 gcc -shared -o libmyfunc.so *.o

使用动态库

1.编译源码 gcc main.c -L. -lmyfunc

2.运行程序前将库放在能找到的路径下

​ (1) 把库拷贝到/usr/lib和/lib目录下。

(2) 在LD_LIBRARY_PATH环境变量中加上库所在路径。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hqyj/share_lib

​ (3) 添加/etc/ld.so.conf.d/*.conf文件,把库所在的路径加到文件末尾,并执行ldconfig 刷新, 这样,加入的目录下的所有库文件都可见。

-fPIC 创建与地址无关的编译程序

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


http://www.ppmy.cn/server/157878.html

相关文章

PHP RCE

靶场搭建 生成容器 docker run -p 18022:22 -p 18080:80 -p 18081:81 -p 18082:82 -p 18085:85 -i -t mcc0624/cmd:latest bash -c /etc/rc.local; /bin/bash 管理网站 http://<IP>:18085/CZKJ2022 用户名&#xff1a;admin 密码&#xff1a;Pssw0rd SSH 用户名root 密…

为什么Agent会失败?2025年对AI的预测

如果说2024年是生成型人工智能的年份&#xff0c;那么2025年就应该是设定合理期望的一年。 根据科技行业分析师的预测&#xff0c;2024年本应是生成式AI&#xff08;Generative AI&#xff0c;简称GenAI&#xff09;的里程碑之年。随着各种复杂应用场景的不断涌现&#xff0c;新…

Kafka集群数据完整性保障:有效防止数据丢失

在大数据和流处理的领域&#xff0c;Apache Kafka以其高吞吐量、低延迟和强大的容错能力&#xff0c;成为了众多企业处理实时数据流的首选。然而&#xff0c;任何系统都难免面临数据丢失的风险&#xff0c;尤其是在分布式系统中。对于Kafka集群而言&#xff0c;确保数据的完整性…

scala基础学习_方法函数

文章目录 方法与函数函数&#xff08;又称函数值/匿名函数&#xff09;定义方法注意 单参数函数多参数函数函数作为参数传递 方法将方法转换为函数方法的返回值总结 方法与函数 函数&#xff08;又称函数值/匿名函数&#xff09; 定义在任何地方&#xff1a;函数可以定义在类…

JSON头文件调用

除了传统的读写操作,现在流行的json文件读取保存,还是非常方便的. 头文件放在源代码中,在调用处添加引用路径 #include “…/ConsoleApplication1/include/json.hpp” using json nlohmann::json; 数据结构例子: // 声明Person类 class Person { public: std::string name; i…

20250108-实验+神经网络

实验3. 神经网络与反向传播算法 3.1 计算图&#xff1a;复合函数的计算图 实验要求1&#xff1a;基于numpy实现 ( y 1 , y 2 ) f ( x 1 , x 2 , x 3 ) (y_1,y_2) f(x_1,x_2,x_3) (y1​,y2​)f(x1​,x2​,x3​) 的反向传播算法&#xff08;不允许使用自动微分&#xff09;&a…

【Python】构建智能语音助手:使用Python实现语音识别与合成的全面指南

随着人工智能技术的迅猛发展&#xff0c;语音助手已成为人们日常生活中不可或缺的一部分。从智能手机到智能家居设备&#xff0c;语音交互提供了便捷高效的人机交互方式。本文旨在全面介绍如何利用Python编程语言及其强大的库——SpeechRecognition和gTTS&#xff0c;构建一个基…

php 二维数组根据其他字段值是否相同来进行去重

在PHP中&#xff0c;可以使用array_reduce函数和array_column函数结合来实现二维数组去重。以下是一个示例代码&#xff1a; $array [[id > 1, name > Alice, age > 25],[id > 2, name > Bob, age > 27],[id > 3, name > Charlie, age > 25],[id …