- 博客(39)
- 收藏
- 关注
原创 1.Linux复习 -基本命令详解
Linux学习内容总目录:基本命令 编译链接 调试 库文件进程 fork exec 信号进程间通讯 : 管道 信号量 共享内存 消息队列 套接字线程 : 线程安全 同步网络编程:tcp/udphttpselect poll epolllievent(1)基本命令ls:查看隐藏文件显示当前目录下有哪些文件ls -l:查看文件类型(参数)以 . 开头为隐藏文件ls -l:查看不到ls -a:可以看到隐藏文件只有在家目录才有创建文件的权限touch :创建普通文件rm :
2022-05-11 15:46:09
292
原创 5.10 BM2 链表内指定区间反转
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。例如:给出的链表为 1→2→3→4→5→NULL m=2,n=4返回1→4→3→2→5→NULL.数据范围: 链表长度 0 < size ≤1000,0 < m ≤n≤size,链表中每个节点的值满足∣val∣≤1000要求:时间复杂度 O(n) ,空间复杂度 O(n)进阶:时间复杂度 O(n),空间复杂度 O(1)class Solution {
2022-05-11 01:08:35
218
原创 5.10 BM1 反转链表
5.10 BM1 反转链表给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0≤n≤1000要求:空间复杂度O(1) ,时间复杂度O(n) 。class Solution { //1.递归public: ListNode* ReverseList(ListNode* pHead) { //特判:注意不要漏掉pHead->next==NULL的情况 if(pHead=
2022-05-10 23:45:05
155
原创 leetcode 23. 合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输出:[]示例
2022-04-28 00:04:19
86
原创 leetcode 21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]把哑节点分配到栈上即可。通过添加哑节点,简化了判断流程。当while退出,可能入参的两个链表当前指针一个为NULL,也可能两个同时为NULL;所以额外增加判断。记得若同时为空,结尾要加NULL;记得循环中要 p = p->next;class Solution { //1.public:
2022-04-25 22:29:12
621
原创 Linux10.10 day23 I/O复用方法select
10.10 I/O复用方法 selecthttp协议 应用层 80tcp协议 传输层io复用方法:select poll epoll在不使用多线程多进程的情况下同时处理多个文件描述符需要使用I/O复用技术:1 客户端程序需要同时处理多个socket2 客户端程序需要同时处理用户输入和网络连接3 TCP服务器要同时处理监听socket和连接socket4 服务器要同时处理TCP请求和UDP请求5 服务器要同时监听多个端口,或者处理多种服务select系统调用:#include&l
2022-04-19 22:02:10
189
原创 Linux10.9 day22 http
10.9 httptcp 传输层协议|http 应用层协议 端口号 80 https www.baidu.com --> DNS \ -> 11.23.3.2 80 web服务器 --- 三次握手建立tcp连接 ---> 浏览器 ip
2022-04-19 22:01:14
212
原创 Linux9.26 day21 udp
9.26 udp上节回顾:tcp特点 面向连接的 可靠的 流式服务1 三次握手 四次挥手connect发起连接开始三次握手 close开始挥手2 应答确认 超时重传 滑动窗口 乱序重排 去重3 send recv 次数不对应 粘包(两次发送的数据被一次收取)多线程:主线程创建多个线程 将c交给各线程 主线程只负责accept()多进程:命令:netstat查看tcp连接的状态:time_wait状态发送缓冲区 接收缓冲区当前的字节数当前进程使用的端口号本节重点:
2022-04-19 21:59:17
283
原创 Linux9.12 day20 tcp协议特点
9.12 tcp协议特点tcp客户端编程流程:ser 服务器端socket()bind() ip+portlisten()accept()recv()send()close()cli 客户端socket()connect() 开始进行三次握手 建立连接send()recv()close() 开始进行四次挥手tcp协议特点:面向连接的 可靠的 流式服务udp协议特点:无连接 不可靠的 数据服握手挥手对于程序员透明 无法看到send() recv() 用户无法
2022-04-19 21:58:00
61
原创 Linux9.11 day19 tcp编程流程 tcp客户端
9.11 tcp编程流程 tcp客户端tcp客户端编程流程:ser 服务器端socket()bind() ip+portlisten()accept()recv()send()close()cli 客户端socket()connect()send()recv()close()代码实现:(ser.c)#include <stdio.h>#include <stdlib.h>#include <unistd.h>#incl
2022-04-19 21:55:14
372
原创 Linux9.5 day18 网络编程
9.5 网络编程路由器:将两个不同的网络连接起来交换机:将主机与主机连接起来联网的目的:为了通讯IP地址:给因特网上的每个主机分配的一个在全世界范围内唯一的标识符 (Linux命令:ifconfig)分为IPV4和IPV6两种IP地址组成:网络号+主机号 (共32位)物理地址(MAC):48位 (也可以唯一标识主机) 不发生变化端口号:用来在一台主机上唯一标识一个应用程序(进程) (16位) (有些特殊端口号不可使用)网络协议:一组网络规则的结合 是我们共同遵守的约定或
2022-04-19 21:52:51
38
原创 Linux8.29 day17 线程同步 条件变量 读写锁
8.29 线程同步 条件变量 读写锁线程同步:信号量 互斥锁 条件变量 读写锁(3)条件变量条件变量的使用必定伴随着互斥锁的使用条件变量代码实现:#include <pthread.h>int thread_cond_init(pthread_cond_t *cond,pthread_condattr_t *attr); //条件变量初始化int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
2022-04-19 21:52:30
69
原创 Linux8.28 day16 线程同步 信号量 互斥锁
8.28 线程同步 信号量 互斥锁线程:进程内部的一条执行路径(序列) 调度的基本单位进程:一个正在运行的程序 动态 资源分配基本单位用线程 同时做多个事情 利用多处理器的资源pcb 进程控制块 struct task_struct; pcb之间使用双向链表链接ps 对外只显示主线程的id 其他线程的不显示ps -eLf 显示进程所有的信息 显示出主线程和其他线程的idLinux系统线程实现的方式:Linux实现线程的机制非常独特。从内核的角度来说,它并没有线程这
2022-04-19 21:51:00
215
原创 Linux8.22 day15 线程
8.22 线程进程间通信(IPC):管道 信号量 共享内存 消息队列进程:一个正在运行的程序 动态 资源分配的基本单位线程:进程内部的一条执行路径(序列) 调度的基本单位多线程:多个线程并发运行 稳定性不及单线程pthread.h //使用线程需调用该头文件int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(start_routine) (void),void *arg); //创建线程pt
2022-04-19 21:49:38
52
原创 Linux8.21 day14 共享内存 消息队列
8.21 共享内存 消息队列共享内存:两个进程可以同时使用的一块空间ipcs可查看 (ipcs -m)使用共享内存基本上一定会用信号量共享内存示例代码:int shmget(key_t key,size_t size,int shmflg); //创建共享内存void* shmat(int shmid,const void *shmaddr,int shmflg); //链接进来 拿出指针int shmdt(cont void *shmaddr); //移除指针 删除映射关系 断开链接
2022-04-19 21:48:18
115
原创 Linux8.15 day13 信号量
8.15 信号量(1)概念信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目。Р操作:获取资源时,需要对信号量的值进行原子减一当信号量值为0时,代表没有资源可用,Р操作会阻塞。V操作:释放资源时,需要对信号量的值进行原子加一!信号量主要用来同步进程!信号量的值如果只取0、1,将其称为二值信号量。如果信号量的值大于1,则称之为计数信号量。临界资源:同一时刻 只允许被一个进程或线程访问的资源临界区:访问临界资源的代码段(2)信号量使用操作信号量的接口介绍:int semg
2022-04-16 22:46:46
84
原创 Linux8.14 day12 管道
8.14 管道进程间通信(IPC):管道 信号量 共享内存 消息队列 套接字管道:有名管道:可以用在任意两个进程之间mkfifo fifo pipe()无名管道:只能用在父子进程之间(方便)管道特点:1 打开管道后 在内存中分配空间(大小永远为零 不在磁盘上写入 永远在内存中)2 向管道中写入数据 实际是写入在内存中3 读取 也是从内存中读取数据!4 写端关闭,读端read()返回值为0 (作为循环判断的退出条件)如果读端关闭 写端写入数据就会产生异常
2022-04-16 22:45:09
191
原创 Linux7.31 day11 mybash
bash 命令解释器 让系统与用户交互1.内置命令 cd bash 直接实现 -> 调用函数实现2.普通命令 fork + exec()bash基本功能步骤:1 bash 打印提示信息 [stu@localhost tmp]$2 fgets(buff) //用户输入数据 ls, cp a.c b.c ,ps -f3 解析命令 “cp”“a.c” “b.c”4 判断是内置命令 还是普通命令5 执行命令 1
2022-04-16 22:43:44
243
原创 Linux7.26 day10 exec 信号
系统调用:文件描述符 open read write close标准输入 0 stdin FILE*标准输出 1 stdout标准错误输出 2 stderrstruct file :r,w,count,偏移量,pos,inodeexec 替换 进程execl execlp execle execv execvp execve库函数
2022-04-16 22:42:19
603
原创 Linux7.24 day09 open
7.24 openfork复制进程僵死进程 :子进程先于父进程结束 父进程没有获取子进程的退出码进程控制块 进程描述符 PCB struct task_struct;win 打开文件:二进制 文本Linux不区分二进制和文本(man 1命令 2系统调用 3库函数)库函数:fopen fread fgets系统调用: 实现在内核中 是用户和内核之间的桥梁从用户态切换到内核态open read write close linux一切皆文件打开 读 写
2022-04-16 22:40:40
788
原创 Linux7.19 day08 fork
7.19fork复制进程PCB 进程控制块进程属性信息(存储在PCB中):pid=3344nameexit_codeuid父进程子进程:fork返回值不同 pid不一定连续 父进程(3345) 子进程(3347)父(2234)进程:2235=fork 子(2235)进程:0=fork每个进程都会有父进程#include <stdio.h>#include <stdlib.h> //exit(0)#include <unistd.h> /
2022-04-16 22:38:33
154
原创 Linux7.17 day07 基础知识
day07 基础知识回顾之前内容:1 内核版本 开源发行版本2 目录结构(文件系统)/根boot etc bin lib home root proc usr var …stu1 stu2stu1:家目录/ome/stu1cd~3 文件类型 普通文件 - 目标文件 d4 权限 r w x - chmod u/g/o5 基本命令 cd touch mkdir pwd ls
2022-04-16 22:36:46
977
原创 Linux 6.26 day06 库文件
库文件静态库 共享库库:预先编译好的方法(函数)的集合静态库:libxx.a共享库:libxx.so静态库的创建:add.c -> add.omax.c -> max.oar crv libfoo.a add.o max.ogcc -o main main.c -L位置 -l库名共享库的创建:add.c -> add.omax.c -> max.ogcc -o main main.c -L位置 -l库名gcc
2022-04-16 22:35:32
48
原创 Linux 6.15 day04 gcc
进程管理: kill pkill &ps pg fgPCB:进程控制块gcc 编译c程序工具 .cg++ .cpp运算器 控制器 存储器 输入设备 输出设备预编译 编译 汇编 链接
2022-04-16 22:30:16
210
原创 Linux 6.5 day03 命令
进程:一个正在运行的程序进程控制块 PCBstruct task——struct;{ pid = 3345}pid(进程唯一标识符) 状态:就绪 运行 阻塞PID 子进程IDPPID 父进程IDCtrl+c 结束 Ctrl+z 停止命令:ps 显示在当前终端中所进行的进程sleep 阻塞进程 sleep 400 阻塞400秒kill 结束进程 kill -9 强制结束进程pkill 结束一组进程bg %1 从前台转移到后台fg %1 从后台转移到
2022-04-16 22:28:45
367
原创 12.单链表
void Print_List(LinkList* plist) //单链表打印(1) 传递地址 更节省空间{ assert(plist != nullptr); ListNode* p = plist->head->next; while (p != nullptr) { printf("%5d", p->data); p = p->next; } printf("\n");}Print_List(&mylist);void Print_L
2021-06-22 19:08:04
29
原创 11.数据类型专题
数据类型:整形 char short int long int long long字节数 1 2 4 4 8float double long double4 8 8 /12/16bool1(void)char a;// 1000 0000 -128 (有符号)unsigned char b;//1000 0000 128 (无符号)
2021-06-22 19:07:56
47
原创 10.动态内存管理(2)
栈区∶我们知道栈区在函数被调时分配,用于存放函数的参数值,局部变量等值。在windows中栈的默认大小是1M,在vs 中可以设置栈区的大小。在Liunx中栈的默认大小是10M,在gcc编译时可以设置栈区的大小。堆区︰程序运行时可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。在Liunx系统中堆区的大小接近3G。一般情况下我们需要大块内存或程序在运行的过程中才知道所需内存大小,我们就从堆区分配空间。int a = 10;int b = 1;int& c = a;const in
2021-06-22 19:07:47
55
原创 9.动态内存管理(1)
int main(){ int n = 5; //int* ip = (int*)malloc(4 * 5); int* ip = (int*)malloc(sizeof(int)); if (ip == nullptr) exit(EXIT_FAILURE); for (int i = 0;i < n;++i) { ip[i] = i + 10; } for (int i = 0;i < n;++i) { printf("%5d", ip[i]); } free
2021-06-22 19:07:27
33
原创 8.结构体(3)
结构体(3)结构体与动态内存void Unit_To_Str(char* buff, unsigned int ip){ assert(buff != nullptr); unsigned char x; char str[10]; for (int i = 0;i < sizeof(unsigned int);++i) { x = ip & 0x000000FF; ip = ip >> 8; _itoa_s(x, str, 10); //将整形转
2021-06-22 19:07:16
51
原创 7.结构体(2)
结构体(2)结构体的大小struct Student{ char s_id[10]; char s_name[10]; char s_sex[8]; int s_age;};//void Print_Student(struct Student stud[], int n)void Print_Student(struct Student *stud, int n) //sizeof(stud) //4字节{ assert(stud != nullptr); print
2021-06-22 19:07:09
51
原创 6.结构体(1)
结构体结构体为一种开发者自己设计的数据类型struct Studnt{ char s_id[10]; char s_name[10]; char s_sex[6]; int s_age;}; //";"必不可少
2021-06-22 19:06:50
54
原创 4.例题-输出数组中第一大和第二大的值
// 输出数组中第一大和第二大的值#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<limits.h>void Print2Max(int* br, int n){ assert(br != nullptr&&n>1); int max1 = br[0] > br[1] ? br[0] : br[1]; int max2 = br[0] &
2021-06-22 19:06:22
86
原创 3.位运算
&(位与) |(位或) ^(异或) ~(位反)char;short;int;long int;longlong;不可进行位运算float;double;long double;pointer(指针)~(位反)c = ~a;//a = 0000 0000;//c = 1111 1111;^(异或)c = a ^ b;c = a ^ a;//c = >0000 0000(将该数置为零)|(位或)c = a || b;c = a | b;&(位与)c =
2021-06-22 19:05:56
38
原创 2.二级指针与二维数组
二级指针int main() //二级指针{ int a = 10, b = 20; int* p = nullptr; int** s = nullptr; s = &p; *s = &a; **s = 100; *s = &b; **s = 200; return 0;}(int型)s+1 int型二级指针 指向p1的地址(&p1)*s+1 int型一级指针 指向a1的地址(&a1)**s+1 int型
2021-06-22 19:05:43
1071
原创 1.C语言概述
C语言1.c语言类型整形 char short int long int long long字节数 1 2 4 4 8float double long double4 8 8 /12/16bool1(void)2.变量 常量变量是以某标识符为名字,其数值可以改变(可读,可写)。(可读(获取,可取值),可写(赋值)常量其值不可改变(只可读,不可写)。
2021-06-22 19:05:31
46
原创 Linux 5.24 day02 基本命令
Linux day02目录结构:根目录家目录 /home/stu /home/xiao(Linux 多用户)…man 查看帮助文档 1 命令 2 系统调用 3 库函数…文件查看命令cat 查看文件 合并文件 向文件中输入数据more 分屏幕查看文件 按q键退出 空格 翻页 回车 按行显示less 查看文件内容 反复查看文件 方向键 上下查看head 显示文件前n行 (默认情况前十行)tail 显示文件末尾n行(eg:tail
2021-06-22 19:05:04
42
原创 Linux 5.22 day01
Linux系统基本命令 编译链接 调试 库文件进程 fork exec 信号进程间通讯 : 管道 信号量 共享内存 消息队列 套接字线程 :线程安全 同步网络编程: tcp/udp http select poll epoll lievent只有在家目录才有创建文件的权限touch :创建文件rm :删除文件pwd :查看当前位置cd ~:回到家目录mkdir c215chmod u+x file 文档文件普通文件d 目录(文
2021-06-22 19:02:27
46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人