Unix环境编程:杂谈
动态加载
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/ 转入系统头文件的路径下