
笔记
文章平均质量分 59
@陈一言
每一篇文章都保证高质量
展开
-
IPC(进程间通信)
IPC(进程间通信)进程是操作系统分配资源的基本单位,也就是说进程间的资源是独立的。一个进程无法直接访问另一个进程的资源。但是进程并不是孤立存在的,进程间需要进行数据传输、进程控制、通知事件、资源共享,所以进程间需要通信。进程的用户空间对于每个进程而言是独立的,所有内核空间都是共享的。进程的内核空间是所有进程共享的。其实是mmu映射的物理内存属于同一块。所以进程间通信其实是在内核中创建一块缓冲区,将用户空间中的数据拷贝到该缓冲区实现进程间通信的。/*内核空间: 内核空间的线地...原创 2022-04-07 21:42:33 · 1046 阅读 · 0 评论 -
进程间通信--打下坚实的基础篇(IPC)
用画板画的图,可能不那么好看(见谅)进程间通迅概念进程是一个独立的资源分配单元,不同的进程(这里所说的进程通常是指用户进程)之间的资源是独立的,没有关联,不能再一个进程中直接访问另一个进程的资源。(与线程的区别出来了,同一个进程间的线程可以共享全局变量,如此以来就可以节省很多开销) 但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信。 任何一个进程中的全局变量再另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,原创 2022-03-31 18:48:19 · 474 阅读 · 0 评论 -
回收子进程
孤儿进程 孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程。子进程的父进程变成init进程。init-->1号进程,被称为进程孤儿院。【孤儿进程是没有危害的】 init进程会循环的wait()它的已经退出的子进程。这样,当一个子进程凄凉的结束了其生命的时候,init进程就会代表党和政府出面处理它的一切善后工作,因此,孤儿进程并不会有什么危害。僵尸进程 僵尸进程:进程终止,父进程尚未回收(父进程后于子进程结束)。子进程残留的资源(PCB)存放...原创 2022-03-31 17:32:01 · 1475 阅读 · 0 评论 -
进程控制a
创建子进程如何创建一个进程:当我们执行一个可执行文件时,便会创建一个进程。如何创建一个子进程:pid_t fork(void);返回值:失败返回-1 成功:父进程返回子进程的pid,子进程返回0注:不是fork能够返回两个值,是在父子进程中返回的值不同。那如何做到的呢?我们看下fork()创建子进程做了哪些事情。(我们前面是不是说过每一进程都会有自己的一个虚拟地址空间)循环创建子进程:先想一个问题:最后有几个进程????for(int i=0;i<3;原创 2022-03-31 16:20:01 · 846 阅读 · 0 评论 -
进程相关概念(避坑指南-通透多进程开发)
C++程序员必会的知识储备程序与进程程序:程序是指编译好的二进制文件,存储在磁盘上,不占用系统资源(CPU、内存、设备等),程序中包含了一系列信息,这些信息描述了如何在运行时创建以进程。--不妨将程序看作一个数据集合二进制格式标识:每一程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其它信息。(Linux中使用ELF格式连接格式) 机器语言指令:对程序算法进行编码 程序入口地址:标识程序开始执行时的起始指令的位置。 数据: 程序文件包括的变量...原创 2022-03-31 14:21:40 · 257 阅读 · 0 评论 -
Linux-文件属性操作函数
C++程序员必会知识int access(const char *pathname,int mode); //access使用权作用:判断某个文件是否有某个权限,或者判断文件是否存在参数:pathname:文件路径mode: R_OK 判断是否有读权限W_OK 判断是否有写权限...原创 2022-03-29 10:29:33 · 1634 阅读 · 0 评论 -
LINUX系统API---操作目录
C++程序员必会的知识目录操作函数int mkdir(const char *pathname,mode_t mode); //创建一个目录 #include <stdio.h>#include <sys/stat.h>#include <sys/types.h>#include <fcntl.h> int main(){ int res = mkdir("mkdirDemo",0777); if(res ...原创 2022-03-28 21:03:36 · 1564 阅读 · 0 评论 -
Linux系统函数API----基本概念
C++程序员必会的知识文件IO如何理解输入输出流?站在文件的角度:输入流—>从内存向文件中写入I,输出流从文件中向内存中写东西O 站在内存的角度:输入流—>从文件向内存中写入I,输出流从内存中向文件中写东西OC库函数如何操作文件FILE:是一个结构体类型,其中包括三个重要的属性,文件描述符、文件读写指针、I/O缓冲区的地址。通过这三个属性,我们就可以定位到磁盘中的每一个文件的某一个位置,并且能找到内存中对应的区域。如此以来,我们就能将数据在内存和文件中进行交互了。..原创 2022-03-28 19:36:42 · 1578 阅读 · 0 评论 -
GDB调试
C++程序员必备知识什么是GDB??GDB是GNU软件系统社区提供的调试工具,同GCC配套组成一套完整的开发环境,GDB是Linux和许多许多Unix系统中的标准开发环境。 GDB主要的四个功能: 启动程序,可以按照自定义的要求随心所欲的运行程序 可以让被调试的程序在所指定位置的断点出停住(断点可以是条件表达式) 当程序被停止时,可以检查此时程序所发生的事 可以改变程序,将一个BUG产生的影响修正,从而测试其它BUG 准备工作通常,在为调试而编译时,必须关掉编译器的优化现象(原创 2022-03-23 21:34:22 · 5226 阅读 · 0 评论 -
编写Makefile
C++程序员必会知识原创 2022-03-23 17:02:11 · 1363 阅读 · 0 评论 -
C/C++静态库和动态库的制作、使用、优缺点
C++程序员必会的知识储备什么是库???库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、类、函数等 库是一种特殊的程序,编写库文件和编写一般的程序的区别不大,只是库文件不能单独运行 库文件有两种,静态库和动态库(共享库) ,静态库在程序的链接阶段就被复制到了程序中,而动态库在链接阶段只是被记录的一些信息(如文件名),而没有把动态库复制到程序中,而是在程序运行阶段由系统动态加载到内存中供程序调用。 库的好处:代码保密(c++程序即使被反编译原创 2022-03-22 20:30:20 · 2469 阅读 · 0 评论 -
gcc的编译过程和gcc与g++的区别
每个喜欢C++程序员的必备知识储备一、GNU编译GCC的编译过程(4个过程5个文件)编译工具链 gcc的编译选项-E 将源文件预处理为预处理后的源文件 -S 将预处理后的源文件编译成汇编文件 -c 将汇编文件汇编成二进制文件 -o 将二进制文件通过链接形成可执行文件 -I(大i ...原创 2022-03-22 15:43:12 · 1034 阅读 · 0 评论 -
Leetcode---爬楼梯
问题描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶提示:1 <= n <= 45来源:力扣(LeetCode)链接.原创 2022-03-07 20:14:25 · 8592 阅读 · 1 评论 -
单链表(面试算法题3)---两链表相交问题
单链表往期文章:单链表(面试算法题1)---学习链表的关键在于code单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化单链表(面试算法题2)---单链表进阶1之快慢指针问题描述:给定两个可能有环也有可能无环的单链表,头节点head1和head2 请实现一个函数如果两个链表相交,请返回相交的第一个节点 如果不相交,返回NULL。解题思路: 1.判断两链表有没有环 通过快慢...原创 2021-12-22 16:01:48 · 213 阅读 · 0 评论 -
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
往期链表文章:(如果想更多的了解单链表,笔者建议可以简略的了解往前的文章)单链表(面试算法题1)---学习链表的关键在于code单链表(面试算法题2)---单链表进阶1之快慢指针创建链表、打印链表、释放内存的基础操作这里就不code了,想了解的朋友可以浏览单链表(面试算法题1)---学习链表的关键在于code今日份试题1:题目描述:给定一个单链表的头节点head,请判断该链表是否为回文结构。实现思路1:栈方法(额外空间复杂度O(N))我们先聊下栈的特点:先进先出abc原创 2021-12-20 22:31:13 · 515 阅读 · 0 评论 -
单链表(面试算法题2)---单链表进阶1之快慢指针
单链表基础操作可以参见我的另一篇博客:建议从基础到进阶 单链表(面试算法题1)---学习链表的关键在于code面试精要:对于部分问题会给出多种解决方案【在时间复杂度相同的情况下优化空间复杂度】【在我们设计一个算法的时候,优先考虑时间复杂度最优。在时间复杂度相同的情况下再去优化空间复杂度】今天我们探讨快慢指针在单链表中的四个经典问题(容易搞错):1)输入链表头节点,奇数长度返回中点,偶数长度返回上中点2)输入链表头节点,奇数长度返回中点,偶数长度返回下中点3)输入链表头...原创 2021-12-16 12:32:19 · 1349 阅读 · 0 评论 -
单链表(面试算法题1)---学习链表的关键在于code
先把单链表构建起来链表的结点结构体:struct node{ int value; node *next;};typedef node*Node;单链表的初始化Node init(){ Node head = NULL; Node p = NULL; int tmp; cin>>tmp; head = new node; head->value = tmp; head-原创 2021-12-15 22:11:20 · 1207 阅读 · 0 评论 -
位操作(异或骚操作)
通过位操作对一个序列中数出现次数的查找原创 2021-12-11 22:44:40 · 537 阅读 · 0 评论 -
约瑟夫环问题的几种解法
int mind01(){ vector<int> vec; int n, m; scanf("%d%d",&n,&m); //初始化 for (int i=1;i<=n;i++) { vec.push_back(i); } //开始游戏 int vz = 0; while (vec.size() > 1) //留下最后一个人 { //约瑟夫环经典公式-->循环队列 vz = (vz + m - 1) % vec.s.原创 2021-10-27 22:25:44 · 363 阅读 · 0 评论 -
Redis数据库操作---包括搭建集群
1.Redis简介 Redis是一种数据库。能够存储数据、管理数据的一种软件2.数据库应用历史: 关系型数据库(表,一个表里面放的数据有限,所以要不断的分表) (1)单机数据库时代:一个应用,一个数据库实例 (2)缓存、水平切分时代: (3)读写分离时代: (4)分表分库时代(集群): -----------------------------------------------------------------数据量越来越大,并发...原创 2021-10-26 22:21:53 · 592 阅读 · 0 评论 -
背包问题之贪心算法
经典的背包问题有两种: 1. 01背包问题-->01背包-动态规划_KING素清风的博客-CSDN博客 【01背包问题这里就不详细介绍了,感兴趣的可以看我的另一篇博客】 2.部分背包问题-->有一个背包,容量是C,有若干个物品,价值各不相同, 重量也各不相同。接下来请你选择一部分物品装入背包,...原创 2021-10-26 22:01:29 · 5349 阅读 · 0 评论 -
各种基础排序的超详细解析及比较
原创 2021-10-16 21:58:41 · 144 阅读 · 0 评论 -
01背包-动态规划
最近在刷题的时候,碰到了01背包的问题,发现不是特别的熟悉。专门写的博客来强化下。前提:01背包-->对于某件物品来说只有两种可能,放入背包,还是不放。假设现在有一个容量为C的背包,有N种物品,其中第 i 件物品的质量为 wi,价值为 vi。我们设一个二维数组来存放对于第i价物品,背包容量分别为0...C时,.背包最大的价值。 ---〉例如我们假设 m[i][j] 为在面对第i件物品时,背包容量为j时,背包的最大价值为m[i][j]的值那我们如何确定 m[i]...原创 2021-10-10 19:38:19 · 531 阅读 · 0 评论 -
linux下文件分类
原创 2021-10-03 17:16:02 · 125 阅读 · 0 评论 -
终于搞明白什么叫做回调了
懂了!懂了!回调最大的好处就在于解耦合!解耦合!我是这样理解的: 1 .假设main()----->add() 【main想调用add()实现加法运算】 -->直接调用add(),当add()改变时,main()中的测试框架不也的发生改变嘛! 2.但main()-->fun(add)-->add()【main想调用add()实现加法运算,不直接调用,通过调用fun(),然后fun()去调用add()】...原创 2021-09-20 21:10:40 · 336 阅读 · 0 评论 -
C++中需要注意的细节
namespace的使用#include <iostream>using namespace std;//定义命名空间namespace NameSpaceA{ int a = 0;}namespace NameSpaceB{ int a=1; namespace NameSpaceC { struct Teacher { /* data */ char na原创 2021-09-17 19:38:11 · 235 阅读 · 1 评论 -
手撕文件加密-解密
//文件解密--解密api调用#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>#include <string.h>#include "des.h"#define SRCFILE "F:/config/outfile.txt" #define OUTFILE "F:/config/decrypt.txt"int decltype_file(const.原创 2021-09-16 21:14:15 · 205 阅读 · 0 评论 -
项目案例-读写配置文件(C提高)
//FILE*fopen(char*filename,char*type);//intfclose(FILE*stream);//intfcloseall(void);//intfget(FILE*stream);//intfput(intch,FILE*stream);stream=stdout-->打到屏幕//putc()与fputc()等价,getc()与fgetc()等价//putchar(c)相当于fputc(c,stdout)...原创 2021-09-16 18:46:10 · 175 阅读 · 0 评论 -
数组拷贝问题:api接口
#include <iostream>#include <string.h>using namespace std;int get_Array(char **srcp1 , int num1, char (*srcp2)[20] , int num2 , char ***ans,int *mynum){ int ret=0 ; int num=0; char **tmp = NULL; if(srcp1 == NULL || srcp2 .原创 2021-09-14 22:03:47 · 159 阅读 · 0 评论 -
C中的数据类型封装机制—void万能类型
C中的数据类型的封装数据类型封装概念void万能类型void的字面意义是无类型,void则为无类型指针,void可以指向任何类型的数据。用法1:数据类型的封装int initHardEnv(void **handle);典型的如内存操作函数memcpy和memset的函数原型分别为:void * memcpy(void *dest,const void *src,size_t len);void * memset(void *buffer,int c,size_t num);用法2:voi原创 2021-09-01 01:04:29 · 568 阅读 · 0 评论 -
数据类型的本质分析
数据类型本质分析超详细分析数据类型的概念“类型”是对数据的抽象类型相同的数据有相同的表示形式、存储格式以及相关的操作程序中使用的所有数据都必定属于某一种数据类型数据类型可以分为三种:简单类型:- 基本类型:整型,浮点型,字符型,空类型- 用户定义类型:枚举类型结构类型:数组,结构,联合,类指针类型前面分析了数据类型的概念和分类,那数据类型的本质思考?????提问1思考数据类型和什么有关系呢?为什么要引入数据类型呢?解答:数据类型可以理解为创建变量的模具(可以想象下原创 2021-08-30 00:45:17 · 587 阅读 · 0 评论 -
2021-08-28
计算机硬件基础-数据表示1 数据的表示十六进制和八进制转二进制是反过程2 编码问题移码是将补码的符号位取反得到3 数值范围一个字节8个位 n=8原码:-127~127反码:-127~127补码:-128~127 (补码的-0为100000000 )4 浮点运算...原创 2021-08-28 23:38:10 · 147 阅读 · 0 评论