
linux系统编程
文章平均质量分 50
冷静
无为则无所不为
大四
展开
-
fork产生的变化
顶住。。。。原创 2022-11-24 12:12:59 · 362 阅读 · 0 评论 -
http socket tcp 之间的区别
哞哞弟原创 2022-09-02 20:05:07 · 605 阅读 · 0 评论 -
三次握手和四次断开
哞哞弟原创 2022-09-02 10:37:45 · 291 阅读 · 0 评论 -
普通用户无法访问hgfs目录
哞哞弟原创 2022-07-28 19:05:26 · 565 阅读 · 2 评论 -
linux的vmware tools 灰色 和 生成 共享 路径
哞哞弟原创 2022-07-28 16:44:06 · 379 阅读 · 0 评论 -
linux FTP云盘
牛逼原创 2022-06-01 18:20:41 · 580 阅读 · 0 评论 -
linux数据库的增删改查(标准库版本)
目录一 数据库创建和校准函数代码实现二 插入 函数三 删除函数四 更新函数五 查询函数一 数据库创建和校准函数代码实现数据库创建函数校准函数open 函数:参数一:数据库名字参数二 :二级指针 定义一个一级指针取地址赋值给他即可 校准函数 :参数说明:open的指针变量 (第一个蚕食)执行的语句:create table stu(id Integer,name char,score Integer);(第二个参数)第三第四 参数:暂不用回调函数 直接都为NULL原创 2022-05-28 16:42:59 · 505 阅读 · 0 评论 -
linux数据库sqlite3的增删改查(命令行版本)
目录数据库嵌入式数据库的安装嵌入式数据API 函数实现数据库嵌入式的数据库 嵌入式数据库的安装1 在线安装: sudo apt-get install sqlite3 2 进入数据库 :sqlite3 嵌入式数据API 函数实现API 函数 补充.table 是查询表的创建是否成功1 创建一个表 2 插入一张记录 3 删除一条记录 每次只能输入一条 (删除id ==所有都删除了)4 更新一条记录 相当于换了数据 为当前数据 (更新名字)..原创 2022-05-28 15:29:21 · 960 阅读 · 0 评论 -
linux io多路复用基本原理和实现
目录一 io多路复用模型二 io多路复下的阻塞与不阻塞io模式三 形成了对比 突出了他的优点四 select模型五 代码实现一 io多路复用模型二 io多路复下的阻塞与不阻塞io模式阻塞io模式阻塞模式 :需要等待一个功能完成了 才能到下一个实现 比如 write read 举例 一句话 概括 读写不可以同时进行 也就是顺序执行 就很好体现出阻塞模式的说法了 要么在读的时候 写在等待 相反也是 但是如果写一直不结束 或者 读出来的数据 是空 的 这样的就会永远发生阻塞了 就原创 2022-05-20 21:18:31 · 1379 阅读 · 0 评论 -
TCP并发服务器补充和UDP客户端和服务器
目录一 TCP并发服务器补充1服务器端二 客户端UDP客户端和服务器一 TCP并发服务器补充用frok函数创建让子进程工作 1服务器端1 为了防止僵尸进程 要在栈区开辟空间 回收子进程 2 用frok函数创建让子进程工作 (kill 序号17 为回收信号)#include<stdio.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/types.h>#include&l原创 2022-05-19 13:34:13 · 154 阅读 · 0 评论 -
TCP编程API实现服务器读取客户端数据
一 TCP和client的关系和区别TCP: 面向连接 是可靠传输 (服务器)client :客户端 有独立的ipv地址 一个或者两个(对于linux来说)区别:客户端是主动的 服务器是被动的 原因:服务器因为是先存在了 处于一种阻塞状态(被动等待) 客户端随时都可以连接 (主动连接)二 创建流程三 tcp 服务器1 socket 函数1 一般为ipv4:选 AF_INET 2:选tcp 对应的参数3 :2不选 原始套接字 就填0 套接字类似 我们串口的波特率 只是一原创 2022-05-18 12:10:37 · 989 阅读 · 0 评论 -
linux 的条件变量 引出 生产者和消费者的关系
目录一 回顾二 条件变量 引出 生产者和消费者的关系三 使用链表功能模仿大饼的生产和被消耗过程四 代码基本框架五 加 环境变量 和互斥量一 回顾为了解决线程同步的问题 我们多引出了一个办法 加入读写锁 注意他是一把锁 读写锁 的读写不可同时进行 但是读可以发生并行 ,写只能并发 读写锁和互斥锁 越靠近临界资源 越好可以避免很多 不相干的数据 参与进来。二 条件变量 引出 生产者和消费者的关系如果我们的临界资源是 空的 还能不能用读写锁或者互斥锁解决 呢 答案是不可以的 先看一段原创 2022-05-07 14:29:06 · 329 阅读 · 0 评论 -
linux 读写锁详细介绍和应用实战
目录一 回顾二 读写锁 概念三 读写锁的特征四 读写锁函数五 应用实战一 回顾1 互斥锁在上节 详细介绍了 他可以解决在同步线程发生抢占时 导致的数据混乱 2 同时也解释了 进行同步线程会出现的原因 1 cpu的占用权 2 数据混乱二 读写锁 概念读写锁是一把锁 不是两把 三 读写锁的特征画图 介绍一下 第二个情况1 首先知道并行的概念 它指的是一个时间段同步执行 2 因为cpu读取很快 所以会 看到是一起的其实不是 因为读写不可同时执行 只能写释原创 2022-05-06 20:54:07 · 1399 阅读 · 0 评论 -
linux 线程同步思想 和 互斥量实现同步思想
目录回顾线程同步思想三级目录回顾上一节说明了在栈区定义的变量 在回收时就会出现错误(不共享资源)只有在堆区才会正常。(共享资源)线程同步思想还是一样的流程 1 创建 线程 2 父线程回收子线程 3 写对应的子线程函数 #include<pthread.h>#include<stdio.h>#include <string.h>#include<stdlib.h>int res;void *mychlidA(void *a原创 2022-05-05 12:32:42 · 309 阅读 · 0 评论 -
linux 回收子线程 和取消(杀死)线程
目录一 回顾二 回收子线程三 在栈区定义回收子线程的变量四 在堆区定义回收子线程的变量五 取消(杀死)线程一 回顾用了 exit(0);进程退出方式和 pthtread_exit(NULL);的混合使用 证明了 pthtread_exit(NULL);退出单个线程是成功的 可行的 。二 回收子线程还是在上次的基础 加 pathread_join函数 即可 参数 第一个 :线程id 参数 第二个:函数指针 (二级指针 )二级指针的赋值对象可以是这样的 比如int **A; /原创 2022-05-04 13:46:49 · 1865 阅读 · 0 评论 -
linux 的 错误打印 和 单个线程退出
目录一 回顾二 错误打印三单个线程退出 实验1四 单个线程退出 实验2五 单个线程退出 实验3一 回顾1 用 pthread_create 函数 并且在main最后 加上sleep(2);2 看到了明显的父子线程抢占现象3 本质和fork 函数 类似 接上一次内容 继续加上一点东西二 错误打印不可以用 perror 函数 引出一个strerror 函数 形参为 pthread_create函数返回值 #include<stdio.h>#include &l原创 2022-05-04 12:46:56 · 905 阅读 · 0 评论 -
linux 线程的概念和创建
目录一 回顾二 线程的概念三 线程的创建一 回顾调用了 fork 函数 父进程杀死 子进程不会在终端执行 而是跑到后台服务了后台服务 就是 比如 用 ls -l 查看到的进程 二 线程的概念先看 进程的框图 父进程调用fork 函数 之后 会克隆出 子进程 并且父进程停止执行 拷贝的内核区是共享的 注意这个待会和线程对比 会有联系 。线程的方式 和进程一样 内核区是共享的 但是在通用创建函数之后 它会分出几个线程 线程之间是不共享的 共享和不共享的列举 前面说原创 2022-05-04 11:42:21 · 236 阅读 · 0 评论 -
linux 守护进程 概念和创建 会话的概念
目录一 回顾二 守护进程的概念三 会话 的概念四 创建守护进程一 回顾前面用了PV 操作同时配合一系列的函数 实现了父子进程通信最本质的要求 只有一个 就是在读的时候不能写 反之 也是。 二 守护进程的概念守护进程相当于是 一个被动的主体 配角的意思 后台服务 就是打开乌班图 比如 用 ls-l 查看到的 就是 后台服务 作用是独立于控制终端 周期性执行某个任务配角工作就是后台服务 后台服务在周期性执行某个任务三 会话 的概念1 不能是进程组长 也就是不能直原创 2022-05-04 10:21:01 · 328 阅读 · 0 评论 -
linux 信号灯的PV操作
目录一 回顾二 PV操作的意思三 代码的实现思路和用到的函数1 第一列函数代码和解析2 在前面基础上加上二三列整合全部代码一 回顾用 semget semctl 函数分别实现了创建和删除信号灯 其实和消息队列的创建和删除基本一致 配置方式都基本一样 二 PV操作的意思 V:1 :释放资源 也就是输出 对应 输出 (读) P : -1 -1 的绝对值--|-1|==1 获取 使用 权 也就是输入 (写)1父进程在写的时候 子进程的读是关闭的2 也就是 在一个时间点 只能进行读或原创 2022-05-03 11:15:45 · 1893 阅读 · 1 评论 -
linux 信号灯的创建和删除
目录一 回顾二 信号灯1 信号灯的创建2 信号灯的 删除一 回顾1 前面用了 signal 函数 结合了 wait waitpid fork kill 等函数的使用2 说明了在父进程不可以直接调用 wait 函数 进行回收子进程 3 需要通过另外写一个signal函数 来间接调用 wait函数进行回收子进程4 exit(0)也是一个信号 对应了序号17 (退出信号)二 信号灯信号灯是 信息量的集合。和共享内存 信息队列 都是ipc的东西1 信号灯的创建设置为key:ICP_P原创 2022-05-03 09:11:26 · 364 阅读 · 0 评论 -
linux :signal函数 和父子进程间的通信(结合signal函数)
目录一 回顾二signal 函数1 signal 函数的剩下两种用法三 父子进程间的通信(结合singal函数)四 父子进程间的通信出现僵尸进程的处理一 回顾1 前面用了 arlarm 函数 设置了定时 到了之后内核才会发送信号 2 和pause函数在不结束前 进程接收的信息都是睡眠状态 3 如果用ctrl+c 结束 它的状态就不存在了。二signal 函数这个函数分解一下 他有三个方法 先用第三种 自定义函数 处理函数指针 选择信号 (参数一 ) kill -l原创 2022-05-02 13:30:21 · 1749 阅读 · 0 评论 -
Linux alarm pause 函数
目录一 回顾二 alarm 函数 (发送闹钟信号函数)三 pause函数(接收睡眠函数)一 回顾1 用了几个函数讲了raise 函数的父子通信 子进程在发送信号的那段时间 父进程在睡眠状态 2 观察了 父进程在接收前后的状态变化。3 并且说明了 waitpid 不能回收子进程 wait 才可以 二 alarm 函数 (发送闹钟信号函数) alarm 函数 和raise函数 相同点 :都是从内核发出 不同:alarm 函数 定时到时间 才发出 raise函数是马上发出 #原创 2022-05-02 11:14:21 · 330 阅读 · 0 评论 -
linux raise函数实现父子进程通信
目录一回顾二 raise函数三 raise 函数结合 fork 函数 实现父子进程通信1 在前面基础上加waitpid 函数2 在前面基础上加wait 函数一回顾用 kill 函数 发送了 信号和确定进程的pid 实现信号功能 让对应进程工作.比如杀死信号 进程就停止工作。 二 raise函数实现的要求 发送一个信号 自己杀死自己 #include<stdio.h>#include<sys/types.h>#include <signal.h&g原创 2022-05-02 10:33:39 · 603 阅读 · 0 评论 -
linux 信号发送
目录一回顾二 信号发送概念三 信号发送实例一回顾前面列举了 shmctl,shmdt等函数的用法并且列举了三种删除映射的方法 同时解释了映射的由来。二 信号发送概念进程A要向内核发送信号 最后进程B接收内核的信号。但是这里存在两个问题 进程A和进程B都不知道 相互间进行工作了所以 1 发送信号要选择 2 进程也要选择。 三 信号发送实例kill 函数也是属于系统函数实现的功能一个进程 向 一个进程 发送 杀死 信号 新建 两个进程hello.c #includ原创 2022-05-02 09:28:14 · 381 阅读 · 0 评论 -
linux shmget ftok shmat shmdt shmctl函数
这里写目录标题一 上一节的回顾二 上一节的补充三 ftok shmget 函数配合生成的key值四 shmat 函数五 shmdt函数六 shmctl函数1 shmctl函数的使用第一种方法2 shmctl函数的使用第二种方法3 不使用shmctl函数第三种方法一 上一节的回顾用 shmget 函数 创建了 共享内存 用 icps -m xxx 删除了指定的内存 二 上一节的补充删除的是映射 为什么不是内核呢 映射的过程相当于 内核的东西换了一个位置 输出 方便用户使用 节省了原创 2022-05-01 11:13:11 · 1197 阅读 · 0 评论 -
linux的共享内存创建和删除
目录一 回顾二 共享内存的概念1 创建共享内存2 删除 共享内存一 回顾1 用 msrcv获取函数 和msgsnd 读取函数的配合使用 实现了全双工 半双工通信 2 明白 全双工 半双工通信 的区别和意思 3 并且要注意 那个是接收 接收了对方发送的字节大小 二 共享内存的概念有两点的区别1 共享内存它会一直存在 在内核 2 读取之后 内容仍存在共享内存中 不会像 管道 读一次之后 会被管道自动释放1 创建共享内存#include <sys/type.h>#in原创 2022-04-30 13:27:30 · 1956 阅读 · 0 评论 -
linux 消息队列的单工通信,半双工通信
目录一 回顾二 消息队列的半双工通信三 消息队列的全双工通信一 回顾1 通过 fgets函数实现输入指令2 再通过 msgnsd 函数读取 值 3 最后通过 msgrcv函数获取 值 输出 本质 只是在读 键盘的值 最后结果是 输出显示 二 消息队列的半双工通信半双工通信一方为 接收 另一方为发送 通信为单项 复制两份代码 一个写接收函数 一个写发送函数 但是这里存在一个问题 你怎么确定 它发送去哪里 谁接收了呢也就是要确定 一个id 地址 用 ftok函数确定原创 2022-04-30 12:41:59 · 727 阅读 · 0 评论 -
linux 消息队列读写函数
目录一 回顾二 消息队列 读取键盘输入值和获取消息 函数一 回顾1 msgget 可以实现 创建队列 2 msggctl 可以实现 删除指定队列 1 2 注意参数配置 异常的判断即可 3 在system 的形参写上固定的命令 在./a.out 之后直接查看 3 可以方便使用 查看 二 消息队列 读取键盘输入值和获取消息 函数因为读取 你要考虑 类型 和 参数 直接用一个结构体的方式 封装起来 获取函数多了 一个形参 long msgtpy 直接一个具体数就行了 其他和读取原创 2022-04-29 13:35:20 · 421 阅读 · 0 评论 -
linux的消息队列的创建和实现
目录回顾消息队列1 msgget函数回顾1 创建的有名管道时候 并不会产生fifo 而是在调用open函数 的时候才会 2 通过两个无血缘关系的进程 分别对有名管道读和写 3 读的时候没有数据 是因为有名管道没有数据消息队列消息的队列就是消息的链表 存放在内核态中1 特定格式就是以链表的方式存在 2 每个节点都可以作为发送和接收的中间过渡方式。3 因为链表的灵活 读取顺序可以打乱4 并且每个链表都有独立的标识符 用于区分类型1 msgget函数...原创 2022-04-29 12:31:41 · 1800 阅读 · 0 评论 -
linux 有名管道进程间的通信
目录一 回顾二 有名管道1 有名 管道 创建三 有名管道进程间的通信1 直接撸代码一 回顾实验 ps aux | grp “bash” 1 ps aux :父进程 grp “bash”:子进程 但是不能直接通信 2 需要把 父进程 重定向为管道 也就是换了输出位置 3 并且父进程从main 开始 ./a。out 打印的是 子进程 excpl 设定的信息 中的 参数的数据 而没有参数命令4 ps aux | grp “bash” 才会出现 子进程读取父进程的东西 二 有名管道原创 2022-04-27 19:38:01 · 702 阅读 · 0 评论 -
linux 父子进程管道通信
目录一 上一节补充二 父子进程管道通信1 这里是先管道 有数据 后 才创建父子进程 ???2 ps aux | grep “bash”一 上一节补充匿名管道为什么读写端是 分别 3 4 呢 读写端会接到 3的后面 所以 为 3 4因为都是属于标准库的 二 父子进程管道通信注意 读写中进行一个时 另外一个关闭 左右两个都为进程 1 这里是先管道 有数据 后 才创建父子进程 ???先做一个实验先 调用 fork 函数 后 pipe函数 #include&原创 2022-04-25 21:56:14 · 1415 阅读 · 0 评论 -
linux 无名管道介绍 ,匿名管道的创建
目录回顾管道读写行为匿名管道的创建回顾1 vfork 函数 调用 之后 会让子进程先执行 用break 强制退出 2 会导致父进程接收不到 所以要用 exit函数 exit 函数起到链接他们的作用。管道读写行为本质:内核缓冲区伪文件:不占用磁盘空间读写端 进行一个 停止另外一个并且会被自动释放。默认阻塞的原因 管道把它想成一个排队阻塞类似队列的原理 先进先出 先进 具有流动性 理解为不占内存的意思。缺点只能读写各一次 不可重复读取 并且只能一个时间点进行一个操原创 2022-04-25 20:42:24 · 693 阅读 · 0 评论 -
linux waitpid vfork exit函数
目录回顾一 waitpid 函数二 vfork 函数三 vfork exit配合使用1 让父进程接收到子进程退出信号的办法回顾前面讲了 wait 函数 主要两个功能 1 回收子进程的pid 这个必须是父进程进行的2 调用一次 只能回收一个 继续往下一 waitpid 函数waitpid 函数和wait函数 都一个用法 区别是形参多了点 1 先看阻塞的情况 最后形参设置为0 情况 1如果wpid==0 返回的就是任意的子进程 想象子进程是有限的 一直while 它总会有尽头原创 2022-04-25 19:57:30 · 317 阅读 · 0 评论 -
linux 进程回收
目录回顾一 进程回收wait函数 和函数解释1 回收子进程2 判断是否为异常退出3 杀死子进程返回的编号(补充)回顾1 父进程退出之后 会产生孤儿进程 并且会被养父进程收养 (int 类型的 )2 父进程一直在工作 没有收到子进程的信息 这时子进程就变成了僵尸进程 退出之后 才能收到子进程信息继续往下学 一 进程回收wait函数 和函数解释1 阻塞和等待就是一个概念 2 回收必须是父进程进行3 获取结束的结束状态(退出原因)是异常退出 还是正常退出 2 3点 我们 结合代原创 2022-04-24 18:38:19 · 757 阅读 · 0 评论 -
linux 孤儿进程和僵尸进程
目录回顾一 孤儿进程1 孤儿进程代码实现 和 查看二 僵尸进程1 僵尸进程代码实现和查看回顾上一节说了 当 调用 execl execlp 函数 时 不用拷贝多余的空间 就可以实现多一个命令(或是多多个命令) 相当于运行一个代码 可以最多实现n个功能 具体还要根据 execl execlp的设定 1 execl 函数可以是有c文件的参数 2 但是 execlp 只能有固定命令参数和命令名字 不能是执行创建的 (hello.c )比如 ps aux ls -l 就是固定命令参数和命令名字l原创 2022-04-24 17:16:10 · 2615 阅读 · 0 评论 -
linux exec函数族
目录回顾exec 函数族exec 函数族的第一种函数说明和实验exec 函数族的第二种函数说明和实验回顾1 父进程调用 frok 函数 克隆出子进程 并且给他拷贝了空间 2 两者操作互不影响 且 内存不能共享 。继续冲 exec 函数族前面说的 父进程调用 frok 函数 克隆出子进程 并且给他拷贝了空间 两者操作互不影响 且 内存不能共享 。 这样会导致浪费了空间内存 如果用exec 就会节省空间 并且会多执行一个命令 或者更多命令 exec 函数族的第一种函数说明和实验p原创 2022-04-24 13:27:25 · 790 阅读 · 0 评论 -
linux 进程数据共享并验证结果
目录回顾一 进程数据共享1 验证 进程数据共享 结果回顾 1 main 函数也是进程 shell 命令行也是 2 父进程 会从 main函数 执行到 fork 函数 停止 3 父进程调用 fork 函数 会克隆出 子进程 4 main shell 父子进程 会发生抢占资源 继续往下 学 一 进程数据共享如果定义 一个全局变量 父子进程对变量的操作 会不会相互影响。他们之间 内存不能共享 ???父进程调用 frok 之后 会克隆出子进程 并且会拷贝出单独的空间 个子原创 2022-04-24 11:55:23 · 291 阅读 · 0 评论 -
linux ps 和kill 指 令
目录前言一 ps 指令1 ps a2 ps u3 ps x4 pa aux5 ps ajx二 kill 指令1 循环 父进程 信号 和部分指令讲解2 | ,R+,S+3 生成一对 存在的文件和 可执行文件4 开始终止父进程信号前言前面讲了 1 父进程是从main函数开始执行的 并且父进程调用fork之后 克隆出子进程 2 fork 执行之后 只有子进程工作 3 fork 执行之后 子进程会抢占 父进程的资源 出现父进程执行的假象 实则是子进程在运行 相当于子进程 多执行了一个if判原创 2022-04-23 22:14:15 · 3264 阅读 · 0 评论 -
linux 进程状态和进程创建
目录进程回顾一 进程状态1 挂起 和终止态2 就绪态 和运行态二 进程创建1 fork 函数2 父进程和子进程执行的时间段进程回顾《进程》上一次讲了进程的 并发和并行区别 并且举列说明了 1 并发 强调是的 同个时间段 发生了 不同事件 因为cpu 读取太快了 所以我们看到以为是同时发生的 其实不是 2 并 行 强调 同个时间点 不同事件发生 互不影响。 我们 继续往下学一 进程状态1 挂起 和终止态挂起 理解为关机, 终止就就是 xxx 了(芭比q了), 初始就是开始状原创 2022-04-23 14:00:51 · 348 阅读 · 0 评论 -
linux 进程
目录前言一进程1 并发2 并行前言到了上一节完全讲了静态库和动态库的制作过程 静态库和动态库 最大区别是 1 静态库在生成c文件的同时也有了o文件 (最开始的时候) 2 动态库是在运行的过程产生了o文件 (运行过程) 3*** 如果用静态库的c文件 文件 去制作动态库 需要把 静态库的 o文件删除了 也就是让他在运行过程产生o文件就行了 后面的步骤按正常流程就行了一进程1 并发1 进程就是 正在运行的程序 2 相当于 你登了微信 可以聊天 还可以听歌 还原创 2022-04-22 20:34:09 · 283 阅读 · 0 评论