- 博客(84)
- 收藏
- 关注
原创 Linux:sh脚本
文章目录1 标头2 执行脚本文件3 数组4 传递参数5 运算符 && 分支语句6 循环语句6.1 for循环6.2 while循环6.3 until循环6.4 case语句 && read输入6.5 循环控制7 函数8 文件、文件夹、字符串判断 && 示例
2024-10-24 18:06:18 461 1
原创 windows terminal & ubuntu:oh-my-posh/zsh
文章目录1 windows terminal : oh-my-posh2 Ubuntu : oh-my-posh3 Ubuntu : oh-my-zsh
2024-10-24 17:58:57 391
原创 Linux:线程
线程进程:运行中的程序线程:进程内部的一条执行路径多线程并发执行(交替,同时)多核,拆分#include<pthread.h>//创建线程int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);//thread:保存创建线程的ID//attr:指定线程属性。NULL//start_routine:线程函数指针
2022-02-25 14:24:08 444
原创 C内置标准函数
printf函数printf直接输出字符串,不加‘\n’char* GetMemory_1(){ char p[] = "hello world"; return p;//返回局部变量}const char* GetMemory(){ const char* p = "hello world";//字符串常量 return p;}int main(){ const char* str = NULL; str = GetMemory(); printf(str);//h
2022-01-14 22:37:41 241
原创 C语言:内存函数和内存重叠
内存函数int main(){ //复制 int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int* p1 = arr;//指向数组的开头,此时arr表示数组首元素的地址 int* p2 = &arr[3];//指向下表为3的数据4 memcpy(p1, p2, 7 * sizeof(int));//4,5,6,7,8,9,10,8,9,10 memcpy(p2, p1, 7 * sizeof(int));//1,2,3,1,2,3,4,5,6,7,mem
2022-01-14 22:37:28 236
原创 C/C++:函数默认值
函数默认值#include<iostream>using namespace std;//int fun(int a, int b = 100)//参数默认值,默认实参,只能处于末尾//int fun(int a, int b = 100,int c = 200)//可以有多个//int fun(int a, int b, int c = 200);//默认值,只在当前文件生效int fun(int a, int b = 100, int c = 300);//同一作用域中,默
2022-01-14 22:36:56 375
原创 C/C++:函数重载
函数重载#include<iostream>using namespace std;//生成函数符号,依靠函数名和参数列表//函数重载,函数名相同和参数列表不同(无法用返回值区分)bool Compare(int a, int b){ return a > b;}bool Compare(char a, char b){ return a > b;}//编译期生成函数符号指令不同,调用时选择对应函数//静多态:函数重载,模板//动多态:继承,虚函数
2022-01-14 22:36:40 125
原创 C++:面向对象
面向对象构造函数析构函数拷贝构造等号运算符重载静态成员和静态成员方法#include<iostream>#include<vld.h>using namespace std;//面向过程//面向对象:对象-类//将变量和函数封装//四大特征:抽象,封装,继承,多态//struct默认属性public//class默认属性privateint school = 985;class Person{private: char* _name
2022-01-14 22:36:24 107
原创 C语言:位运算符
位运算符:4个字节32位(10<<8) | 210: 0000 1010 (1个字节)10<<8: 0000 0000 0000 1010 0000 000010<<8 = 10 * 28 = 25602: 0000 0010(10<<8) | 2: 2048 0 512 0 0000 0 0 2 0 = 2562或 |:0 | 某一位,某一位不变1 | 某一位,某一位变为1与 &:0 & 某一位,某一位变为01
2022-01-14 22:35:59 207
原创 Linux:进程间通信
进程间通信(IPC)管道通过在内存中创建管道文件实现进程间的通信大小为0,磁盘不存储内容文件操作符,使用和普通文件操作一样进程打开:0标准输入,1标准输出,2标准错误输出mkfifo信号量共享内存消息队列套接字...
2022-01-14 22:35:16 325
原创 C语言:伙伴系统
文章目录1 伙伴系统2 C语言实现2.1 头文件2.2 创建内存池2.3 初始化内存映射顺序表2.4 分配内存单元2.4.1 从内存映射表中删除该内存单元2.4.2 分配内存单元,将剩余空间分裂2.5 回收内存2.5.1 判断要回收的内存单元是左块还是右块2.5.2 将内存单元和顺序表映射2.5.3 判断顺序表是否为空2.5.4 判断伙伴,进行内存单元的回收合并1 伙伴系统与边界标志法相比没有尾信息分配内存块大小: 2n由同一个内存块分割成的两个完全相等的内存块互为伙伴。内存碎片化严重回收时
2021-12-19 19:57:17 2023
原创 C语言:边界标志法
边界标志法动态内存管理,双向循环链表首次拟合法链表中查找第一个能满足要求的内存块,进行分配,时间复杂度O(n)回收内存时,直接从头部插入,时间复杂度O(1)。(链表无序)最佳拟合法链表中查找第一个满足要求且适合的内存块(即,满足分配要求,且多出部分剩余最少),进行分配,时间复杂度O(n)。(最佳拟合法尽量使用从小到大有序的链表,此时查找次数为n/2)回收内存时,仍需使链表有序,时间复杂度O(n)。内存碎片,两极分化,适合内存块分布较广。最差拟合法链表中查找第一个满足要求且富余的内存块
2021-12-19 19:56:29 1261
原创 Linux:进程替换exec
进程替换exec:替换进程实体(物理内存)fork,写时拷贝,通过exec产生新的进程主体。只有一个进程,exec,产生新程序替换原程序所有代码指令,进程不变。#include <unistd.h>extern char **environ;//库函数//man 3 execint execl(const char *path, const char *arg, ..., (char *) NULL);int execlp(const char *file, const
2021-12-17 21:55:53 609
原创 Linux:僵死进程,信号及其响应方式
僵死进程子进程结束后,需等待父进程结束时获取子进程的退出码,才能结束整个进程,父进程未获取,子进程仍需保存退出码,无法释放PCB,则表现为僵死进程。当父进程结束后,子进程变成孤儿进程,init接管处理,释放PCB。父进程获取子进程的退出码pid_t wait(int* wstatus);pid_t waitpid(pid_t pid, int *wstatus, int options);...
2021-12-17 21:54:39 577
原创 Linux:进程创建fork、写时拷贝,虚拟地址映射
进程创建#include <sys/types.h>#include <unistd.h>pid_t fork(void);//通过复制调用进程来创建一个新进程。新进程称为子进程,调用进程为父进程。//子进程返回值为0,父进程返回值为子进程的PID、//子进程继承父进程的数据、程序计数器EIP等,包括缓冲区的数据fork,通过复制调用进程来创建一个新进程 1 #include<stdio.h> 2 #include<stdlib.h&g
2021-12-15 21:32:33 613
原创 微体系架构:CPU&RAM
锁存器:打开允许写入线,将数据保存在锁存器中;关闭允许写入线,输出不会随输入发生改变1个锁存器保存1位即1bit的数据。一组8个锁存器,可以组成一个8位寄存器简单组合:一根允许写入线连接所有的数据输入线+所有的输出线。8位=8+8+1根线矩阵,行列选择线+允许写入线+允许读取线+数据输入线。256位=16+16+3 - 多路复用器multiplexer,将地址转为行列,4位二进制转十进制,至八位输出256位内存,需要8位地址,4位行4位列(
2021-12-10 19:34:38 2519
原创 Linux:文件操作函数,用户态,内核态
文件操作C语言:fopen, fread, fwrite, fclose, fseek(库函数)系统调用函数:调用在用户态,执行在内核态查看帮助文档#查看帮助文档man 1 命令man 2 系统调用函数man 3 库函数open#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>int open(const char* filename, int flag, int m
2021-12-08 14:02:05 1300
原创 C语言:联合体,位段
联合体共用体联合体内共用地址空间,即共享内存,从低地址覆盖一次只能使用一个成员。#include<stdio.h>int main(){ struct A//8个字节 { char a; int b; }; union B//4个字节 { char a; int b; }; return 0;}#include<stdio.h>int main(){ struct A//8个字节 { char a; int
2021-12-07 13:39:41 349
原创 Linux:用户管理
文章目录1 用户管理1.1 用户信息存储位置1.2 创建用户1.3 修改用户密码1.4 删除用户2 系统运行模式1 用户管理Linux:允许多用户同时登录工作root:超级管理员,最高权限,管理其他用户1.1 用户信息存储位置/etc/passwdcd /etcvim passwd用户名:x:用户UID:组GID::默认登录目录:默认使用终端/etc/groupcd /etcvim group组名:x:组GID:用户名 #包含其他组用户,则该组为该用户的附加组
2021-12-06 17:58:54 699
原创 Linux:进程
进程管理进程运行中的程序(动态)程序(可执行的二进制文件)C/C++源代码——编译——链接——程序Java源代码——编译——字节码文件——JVM(java虚拟机)进程的状态:创建就绪运行:CPU执行进程中的指令结束阻塞#mermaid-svg-zCAWORWIiqcCgyWl .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#3
2021-12-06 15:45:35 498
原创 C:文件操作——从txt文件中读取最长行的内容
从读取每一行,直至文件末尾,并输出最长和长度#include<stdio.h>#include <string.h>#include <cassert>int main()//从读取每一行,直至文件末尾,并输出最长和长度{ FILE* fr; fopen_s(&fr, "C:\\2.txt", "r"); assert(fr != NULL); char buf[1024] = {}; /*缓冲区*/ char length[1024]
2021-12-05 20:19:37 540
原创 C/C++/Linux:编译链接过程
文章目录二十一、 预处理器21.1 常见预处理命令21.2 宏命令21.3 条件编译21.4 其他指令21.5 编译链接过程二十一、 预处理器21.1 常见预处理命令21.2 宏命令21.3 条件编译21.4 其他指令21.5 编译链接过程预处理:编译 汇编 链接项目——属性——C/C++——预处理器——预处理到文件(是)——生成.i文件...
2021-12-04 17:47:33 1054
原创 C/C++:内联函数
内联函数#include<iostream>using namespace std;inline int fun1(int a, int b)//inline,建议将函数处理为内联{ //只在当前文件生效,生成函数符号属性local,链接属性,内部 int c = a + b; return c;}#define SUM(a,b) a+b//宏函数,在编译时期,直接替换 //没
2021-12-03 21:04:40 88
原创 C++:namespace和输入输出
namespace和输入输出#include<iostream>using namespace std;namespace Type//命名空间{ typedef int INT; typedef char CHAR;}using namespace Type;//使用全部命名规则using Type::INT;//使用某一个命名规则int main(){ INT a = 10; cout << a << endl; cout <&
2021-12-03 21:04:17 133
原创 Linux:gdb调试
发行版本和开发版本一步生成gcc -o main main.c #生成release版本gcc -o debug main.c -g #生成debug版本多了 debug_* 段readelf -S mainreadelf -S debug分步生成编译期加入debug后续直接继续生成gcc -c main.c -g #编译期加入debuggcc -o main main.o #继续生成gdb调试gdb debugl #默认显示main函数所在
2021-12-01 19:36:19 865
原创 Linux:链接文件,库文件
文章目录1 链接文件1.1 软链接1.2 硬链接2 库文件2.1 静态库(.lib / .a)2.1.1 库的生成2.1.2 库的使用2.2 动态库(共享库)(.dll / .so)1 链接文件1.1 软链接符号链接(相当于快捷方式)存储源文件的存储路径与源文件的inode不同Linux文件系统:EXT4,索引式文件系统inodeblocksuperblock文件的属性信息block编号和文件的权限、用户等文件的真实内容整个文件的信息inode&bloc
2021-12-01 19:03:53 1243
原创 Linux:目录,文件
文章目录Linux1 系统目录结构2 文件2.1 权限3 文件操作命令3.1 创建3.2 删除3.3 拷贝3.4 剪切 / 重命名3.5 修改属性3.6 文本编辑3.6.1 末行模式3.6.2 命令模式3.7 查看文件内容Linux冯诺依曼:CPU(计算器、控制器),存储器,I/O(输入设备、输出设备)操作系统:管理软硬件资源,为用户提供与计算机交互的一种软件。Linux:免费,开源,多用户同时操作,内核小1 系统目录结构根目录/bin:系统所使用命令的可执行文件/home:普通用
2021-11-30 20:35:10 739
原创 Linux安装——VMware + RedHat
http://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/yum-4.7.0-4.el8.noarch.rpmhttp://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/yum-utils-4.0.21-3.el8.noarch.rpmhttp://mirrors.163.com/centos/8/BaseOS/x86_64/os/Packages/python3-urllib3-1.24.
2021-11-29 19:05:25 1375
原创 C语言:二十、文件操作
文章目录二十、 文件操作20.1 文件概念20.2 文本文件20.3 二进制文件20.4 文件常用函数二十、 文件操作20.1 文件概念保存在外部介质(磁盘、光驱、U盘)上的数据的集合。文件:程序文件、数据文件(供程序运行时读写的数据)二进制文件(图片、音乐、视频等)、文本文件文件名文件指针文件缓存文件流输入输出,数据传送的过程20.2 文本文件顺序读写随机读写20.3 二进制文件顺序读写随机读写20.4 文件常用函数...
2021-11-28 21:07:23 137
原创 C语言:高级指针
高级指针#include<stdio.h>int main(){ int a;//变量 int a[10];//数组 int* a;//指针 int a();//函数 int(*a)[];//一定是一个指针,指向数组的指针,数组指针 int* a[10];//一定是一个数组,指针数组 int* a();//指针函数,返回值是int*,指针 int(*a)();//函数指针,一定是一个指针,指向函数 int* (*a)(int, int);//函数指针 int(*arr
2021-11-28 21:05:47 160
原创 二分查找/折半查找
二分查找时间复杂度O(log2n)#include<stdio.h>#include <cassert>int BinSearch(int *arr, int len, int key)//折半查找,二分查找,有序{ //O(log2n),log以2为底n的对数 assert(arr != NULL); if (NULL == arr) { return -1; } //
2021-11-28 20:52:23 81
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人