Skip to main content

Command Palette

Search for a command to run...

Unix环境编程:杂谈

Published
3 min read

动态加载

API

进程管理

什么是进程

进程的创建

进程的终止与遗言函数

进程资源回收

进程的映像更新

ps -o pid,ppid,pgrp,comm 这个linux命令是将当前终端上运行的进程打印出来

进程中使用环境变量

子进程环境变量改变 不会更改父进程的环境变量

进程间通信

有名管道不存储数据 其本身大小为 0 当一个进程写入数据进去时 如果没有进程读取数据那么该写进程就会堵塞在哪里 同理 如果读进程想要读取数据 但是却没有数据的写入那么也会堵塞 直到有数据写入才能够读取

库文件

库文件的制作

  • ar -r lib(库名).a *.o 创建一个静态库文件 将所有的目标文件加入进去

  • ar -t lib(库名).a 查看该静态库里有哪些文件

  • 链接文件 gcc main.o -L. -lpmath L后面跟个. 代表在当前路径下去找链接文件 而l后面则跟的是链接文件的名字

  • 在现实程序编写中,一般不将main.c文件与其他函数的源文件放在同一个文件夹下

    • 不过 将main.c 没有放在与其他资源文件的相同路径下 会导致编译不成功 有三种方法可以解决这个问题

      • 1、我们原来的头文件的引入是直接#include "p_math.h" 这个写法是当main.c与资源文件在一个文件夹下的写法 而最简单的解决办法就是 改写为 #include "完整路径/p_math.h"

      • 2、第二种解决办法就是将""改为<> 这样系统会将其识别为系统库文件 会去系统指定的路径下去查找 只需要再把p_math.h 文件移到系统指定的路径下就行

      • 3、第三种解决办法就是 在编译main.c文件的时候 由 gcc -c main.c 改为 gcc c main.c -I+(p_math.h所在的文件夹路径) 就可以正常编译了

动态库的制作和使用

  • 在编译资源文件的时候,使用-fPIC 这个通用的命令 表示现在我们要来生成一个与目标位置无关的目标文件 然后再将其编译为动态库文件 其前面写一个 -shared文件表示这是一个共享文件

  • ldd a.out(可执行文件 ) 可以查看可执行文件链接了那些动态库

  • LD_LIBRARY_PATH是动态库执行的时候寻找动态库文件的路径 通过export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:(你想要加入的寻找路径)就可以解决这个问题

  • 上面的是第一种解决办法 第二种解决办法是将t_math 文件下的动态链接文件放到系统默认的动态库链接路径下 比如/lib /usr/lib

内存管理

段地址

保护模式

映射

网络编程

网络基础

基于TCP编程的模型

UDP 编程

文件元数据

什么是文件元数据

获取文件元数据

文件管理

什么是文件管理

进程的umask掩码

umask掩码 及将对应组的对应二进制位为1的位置给屏蔽掉 比如umask掩码初始值为0002 其含义是在创建文件时 将其他人的写权限给屏蔽掉 而 下面 将umask值设为 0444 这样就是屏蔽掉所有组的读权限

文件的关闭

文件的读写

复制文件描述符

文件夹的操作与文件锁

文件锁

文件权限

文件权限1

用户和用户组

文件类型

文件权限

线程

创建线程

线程的终止

线程的同步

条件变量

信号

信号概念

信号的产生

信号的阻塞

信号1-31是不可靠信号 31之后是可靠信号

未决信号与贡献内存

map映射文件

1

选择port时可以选择四个参数 其中再选择PROT_NONE后就不能选择其他参数 二百选择是用其他的几个参数的时候 可以组合使用 使用或运算

文件映射之解除映射

错误处理

1.错误处理逻辑

2.将perror封装为宏

然后在通过 sudo MV (小写) 头文件名 /usr/include/ 转入系统头文件的路径下

More from this blog

Redis学习

1.什么是SSD HDD作为存储传统的数据库? SSD:固态硬盘---使用闪存芯片存储数据 无机械部件 特点:读写速度快(尤其是随机读写)、延迟低、抗震性好,但单位容量成本较高。 HDD:机械硬盘--传统机械硬盘 特点:容量大、成本低,但读写速度较慢(尤其是随机读写),延迟高。 2.什么是非易失性持久化 非易失性持久化 = 靠谱的硬件 (断电不丢数据的 SSD/PMEM) + 严谨的软件策略 (确

Mar 4, 20261 min read

分布式存储系统面试问题解析

共识算法剖析 raft共识算法 1.在你的 C++ 实现中,如果 Leader 发送 AppendEntries 给 Follower,但 Follower 的日志落后太多(比如中间缺了 100 条),Raft 论文建议是一个一个往前找(nextIndex--)。这种做法在高性能存储中显然是不可接受的,你会如何优化这个“回溯”过程? 在工程实现中,我会从两个维度优化日志冲突后的同步效率: 1. 快

Feb 9, 202613 min read

Unix环境编程:第一章

1.1操作系统的介绍 1.2 计算机系统的分层 1.3 编译过程 ?上一个命令的运行结果 echo 就是输出上一个命令的运行结果 哎linux环境下文件中查找一个元素 即在命令模式下 输入/+你要查找的字符 即/printf 这样 然后找到之后 n表示查找下一条 shift+n表示上一条 file+文件名 查=查看文件是否可运行 1.4 多模块开发 变量的定义是为变量扩充作用域 而变量的声明需要为变量内存空间 gcc -c 文件 检验是否存在语法错误 nm 目标文...

Jan 30, 20261 min read

C++ Stl杂项

迭代器特性 输入流的容器特性 迭代器对算法的影响 仿函数和函数对象 分配器 对于平常的我们内存的使用,直接使用new delete 即可 使用分配器的话还需要记住自己当时申请了多少的内存 很不方便 哈希表深度探索 哈希容器 哈希表在扩充时,会先将自身大小乘以2 然后在选择自身2倍距离最近的一个质数 作为新的大小 哈希函数 以哈希表为底层支撑的适配器 红黑树 容器 list容器 forward_list 对于标准库,其本身提供一个sort排序函数,但某些容器也提供sort服务...

Jan 29, 20261 min read

xianyu-sheng

29 posts