- 博客(31)
- 资源 (3)
- 收藏
- 关注
原创 Unix环境编程-第八章多路复用I/O
线程同步: 三种解决思路: 多路复用IO 解决多线程所带来的效率问题 1.select: int select(int nfds(需要关心的文件描述符最大值+1), fd_set *readfds(准备读的文件描述符集合), fd_set *writefds(准备写的文件描述符集合), fd_set *exceptfds(有异常的文件描述符集合), struct t...
2019-10-30 19:52:16
206
原创 Unix环境编程-第七章线程和线程同步
线程和进程的区别 进程:拥有4G独立的虚拟内存 复制数据空间 共享代码区 线程:拥有独立的栈区 同一个进程中的线程共享代码区、数据区、堆区 轻量级的 并发性 一个系统最大的进程数 远远小于 线程的最大数量 线程的函数: 如果函数出错 不会 修改全局的errno 也意味着不能使用perror printf("%m") 都是通过返回值 错误码通过函数返回 统一编程接口: 函数名相...
2019-10-30 19:50:09
196
原创 Unix环境编程-第六章网络通信
网络通信 ISO/OSI网络七层模型 TCP/IP模型 TCP:数据传输控制协议 数据流 连接 可靠 数据完整且有序 比UDP要低 三次握手 四次分手 UDP:用户数据报协议 数据报 不连接 不可靠 不保证数据的完整和有序 传输效率要高 编程模型 TCP server 1. socket(AF_INET,SOCK_STREAM/SOCK_DGRAM,0) 2. struct ...
2019-10-30 19:44:33
205
原创 Unix环境编程-第五章进程间通信
进程通信: 多个进程之间进行数据交换 1.简单进程间通信:命令行参数.环境变量.信号.文件. 2.传统进程间通信:管道. 3.XSI进程间通信:共享内存.消息队列.信号量. 4.网络进程间通信:套接字. 信号集:信号的集合 信号量:进程间通信的方式 限制进程多共享资源的访问 信号量集:线程同步的一种方式 半双工管道 mkfifo 创建管道文件 有名管道和无名管道 IPC标识 1.创建IPC键值 ...
2019-10-30 19:43:21
188
原创 Unix环境编程-第四章进程
进程 程序:存储在磁盘中的静态的机器指令 静态的 程序运行之后:操作系统会把程序的指令及数据加载到内存中,形成4G虚拟内存映射 进程:程序运行之后动态的内存分布 动态的 正在运行的程序 同一个程序 可以同时运行多次 多进程:重量级 独立4G的虚拟内存空间 多线程:轻量级 共享进程的内存空间 会独立的栈空间 进程 启动很多进程 进程号只是一个数字 操作系统里面 延迟...
2019-10-28 21:14:32
163
原创 Unix-第三章文件操作
文件系统 在linux下面 一切设备皆文件 open/read/write/ioctl/close C语言标准库里 操作文件的函数 fopen fread fwrite fclose ftell fseek fprintf fscanf fputs fgets … FILE * 文件指针 结构体指针 open 打开 或者 创建并打开文件 create ...
2019-10-26 16:05:07
186
原创 Unix环境编程-第二章内存管理
内存管理 虚拟内存 1个进程有4G独立的虚拟内存 0-3G 用户内存 3-4G 内核内存 代码区->数据段->BSS段->堆区->堆栈缓冲区(共享库、共享内存)->栈区->命令行参数 环境表->内核区 特点以及存储的数据 环境表: 环境变量=环境变量值 形式的字符串 PATH=/home/ubuntu 以字符串形式存在的环境变量的首地址存储在一个 指...
2019-10-23 15:26:10
245
原创 Unix环境编程-第一章动态库,静态库
静态库 把目标文件归档 1.编写源代码 add.h add.c sub.h sub.c 2.编译成目标文件 gcc -c add.c ==> add.o gcc -c sub.c ==> sub.o 3.创建静态库 ar -r liboper.a add.o sub.o ==> 静态库的名字是 oper 在任何一个地方: 如果需要使用到add...
2019-10-22 10:45:52
167
原创 数据结构与算法-第九章计数,基数
时间复杂度 最坏时间复杂度 空间复杂度 稳定性 计数排序 n+k n+k n+k 稳定 基数排序 n*m n*m m 稳定 计数排序(桶排序) void countSort(int arr[],size_t len){ int max = arr[0]; int min = a...
2019-10-22 10:26:08
209
原创 数据结构与算法-第八章-堆,希尔,快速,归并
时间复杂度 最坏时间复杂度 空间复杂度 稳定性 归并排序 nlogn nlogn n 稳定 快速排序 nlogn n^2 logn 不稳定 堆排序 nlogn nlogn 1 不稳定 希尔排序 nlogn n*s 1...
2019-10-22 10:19:22
141
原创 数据结构与算法-第七章冒泡,选择,鸡尾酒,插入
时间复杂度 最坏时间复杂度 空间复杂度 稳定性 冒泡 n^2 n^2 1 稳定 选择 n^2 n^2 1 不稳定 鸡尾酒 n^2 n^2 1 不稳定 直接插入 n^2 n^2 1 稳定 折半插入 n^2 n...
2019-10-22 10:08:48
307
原创 数据结构与算法-第六章树
Btree.h #ifndef _BTREE_H__ #define _BTREE_H__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int T; typedef struct TNode{ T data; struct TNode *left; struct...
2019-10-22 09:37:36
421
原创 数据结构与算法-第五章双向队列
Dequeuer.h #ifndef _DEQUE_H__ #define _DEQUE_H__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int T; typedef struct Deque{ T *m_vect; //存储元素的内存空间 size_...
2019-10-22 09:35:28
132
原创 数据结构与算法-第四章队列
Queue.h #ifndef _QUEUE_H__ #define _QUEUE_H__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int T; typedef struct Queue{ T *m_vect; //存储数据的内存空间 size_t cap...
2019-10-22 09:33:31
161
原创 数据结构与算法-第三章双向链表
Dlink.h #ifndef _DLINK_H__ #define _DLINK_H__ #include <stdio.h> #include <stdbool.h> #include <stdlib.h> typedef int T; typedef struct DNode{ T data; struct DNode *prev; struct...
2019-10-22 09:31:18
155
原创 数据结构与算法-第二章链表
Slink.h #ifndef _SLINK_H__ #define _SLINK_H__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int T; //单向链表的节点 typedef struct SNode{ T data; //节点元素 ...
2019-10-22 09:29:45
282
原创 数据结构与算法-第一章堆栈
Stack.h #ifndef _STACK_H__ #define _STACK_H__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int T; //#define N 10 typedef struct Stack{ T* m_vect; //存储元素内存空...
2019-10-22 09:26:48
192
原创 C语言-第十三章文件操作
文件操作 程序启动时 从文件中加载数据到程序中 程序退出前 把程序中处理的数据保存到文件 C语言提供用于文件操作的函数: FILE *fopen(const char *path,const char *mode); path: 文件路径 包含文件名 绝对路径 "/home/ubuntu/a.txt" 相对路径 "a.txt" mode: 打开方式 "r" ...
2019-10-22 09:20:45
191
原创 C语言-第十二章高级指针
const与指针: const char *p; const修饰 *p *p 只读 //*p = ‘X’;错误的 p的值可以修改 p可以指向其它内存 p = “HELLO”; char const *p; const修饰 *p *p只读 p可以改变 char * const p; const修饰p p只读 *p 可以改变 const char * ...
2019-10-22 09:04:32
133
原创 C语言-第十一章结构体
数组: 一组同类型数据的集合 结构体:一组类型不定的数据的集合 数组: 直接声明变量 int arr[10]; 结构体:先声明定义结构体类型 struct 结构体名字{ 成员类型 成员名字; … }; 有了结构体类型之后 可以声明变量 struct 结构体名字 变量名; struct Stu s; 数组: 数组通过下标的方式进行访问数组元素 数名名[下标] 结构体:每一个结构体变量...
2019-10-22 08:57:59
393
原创 C语言-第十章文件编译
1.预处理 -E 进行预处理工作 工作内容: 进行预处理(预处理指令),进行宏替换和头文件导入或者条件编译等 去掉注释内容 不会自动生成文件 -o 可以指定生成的目标文件 .i 2.编译 -S 检查语法错误 生成汇编程序 工作内容: 检查源代码或者经过预处理之后代码的语法错误 生成汇编程序 .s 3.汇编 其实是用as命...
2019-10-21 19:55:53
197
原创 C语言-第九章动态内存
动态内存(堆区) 手动申请 手动释放 什么时候使用动态内存: 1.存储比较大的数据量时 2.内存大小可以变化时 #include <stdlib.h> void *malloc(size_t size); 申请size个字节的动态内存 返回申请到的动态内存的起始地址 如果申请失败返回 NULL void *calloc(size_t nmemb,size_t size); ...
2019-10-21 19:40:33
171
原创 C语言-第八章字符串
C语言中字符串的三种形式 (1) 字面值字符串 存储在代码区 代码区不能修改 在程序中用双引号("")引起来的内容 a.字面值字符串里面的字符不可修改 b.相同字面值字符串在内存中只保留一份 (2) 字符数组的形式 存储在栈区 栈区可以修改 注意: a.保留足够的空间用于存储'\0' b.字符数组可以直接用 字符串字面值 直接初始化 char s1[...
2019-10-21 19:30:15
163
原创 C语言-第七章指针
指针 内存地址: 声明变量 这个变量其实代表一块内存区域 操作变量 其实操作的是这片内存区域里存储的值 对于变量可以进行取址(&)运算,取得这个变量所代表的内存地址 对于取址运算符(&) 操作数只有一个,且只能是左值 %p 可以输出一个地址 地址:一个编号 一个十六进制的整数 内存地址即指针 指针变量 可以 保存 内存地址 4G虚拟内存: 参考一张图 https://b...
2019-10-21 17:13:49
250
原创 C语言-第六章函数
定义:是一段满足一定形式且具有特定功能的代码 语法形式: 返回值类型 函数名(参数列表){ //函数体 } 函数的意义 (1) 函数可以重复调用 函数的代码不需要重复实现 (2) 提升开发效率 (3) 有利于结构化编程 实现项目的基础 (4) 对于别人提供的函数 不需要知道实现原理和过程 只需要知道调用即可 自定义函数: 返回值类型 函数名(形参列表){ //函数体 } 返回值类型: 调用一个...
2019-10-21 16:34:55
370
原创 C语言-第五章数组
一次性声明多个同类型的变量 (1)声明 定义 数组 数据类型 数组名[数组长度]; 声明定义一个数组,且相当于声明了 数组长度 个同类型变量 int scores[10]; scores[0] scores[1] scores[2] ... scores[9] 这10个int类型变量 通过数组声明的变量同名,为了区分这些变量需要通过下标来访问这些变量 访问数组元素: 数组名[下标]; 下标:...
2019-10-21 16:31:37
170
原创 C语言-第四章三种语句
分支选择语句 if(){ } if(){ }else{ } if(){ }else if(){ }else if(){ } if(){ }else if(){ }... .else{ } 注意: (i) else if可以有多个(>=0) (ii) else 最多能有一个(0或者1) (iii) if 和 else if里面的条件可以重复 (iv) if() 省略大括号 后...
2019-10-21 16:26:07
315
原创 C语言-第三章基本数据类型和关键字
基本数据类型 整数类型: 字节 短整型 short 2 整数 int 4 长整型 long 4 重要:不同的操作系统不同 4/8 浮点类型: 单精度浮点类型 float 4 双精度浮点类型 double 8 字符类型: ch...
2019-10-21 16:12:29
486
原创 C语言-第二章vi编辑器的使用
三种模式 命令(Command)模式 底行(Last-line)模式 编辑(Entry)模式 用vi打开一个文件之后 进入 命令模式: 不能编辑文档,只能识别命令 命令模式 i,a,o,I,A,O 进入到编辑模式 i : 在光标处插入 I :在光标所在行首插入 a :在光标后面插入 A : 在光标所在行尾插入 o : 在光标下一行插入新行 O : 在光标处插入新行 编辑模式下进行文档编辑...
2019-10-21 16:06:42
227
原创 C语言-第一章linux基础命令
1. ls list 显示路径下的文件信息 -a 选项 显示隐藏文件(unix下的隐藏文件以.开头) -l 详细显示文件信息 -t 按时间进行排序 按时间倒序(新建的在前) -r 按原来的逆序显示 -S 按文件大小 从大到小显示 drwxr-xr-x 4 ubuntu ubuntu 4096 6月 10 2017 build 文件类型属性 - 普通文件 ...
2019-10-21 15:58:49
122
原创 数据结构与算法-总结
day1: 数据结构算法: 线性:数组 链表 双向链表 堆栈 队列 双向队列等 非线性:二叉树 图 等 算法: 查找 排序 数据结构:数据元素一级数据元素存储之间的关系结构 day2: 数组: (1).一片连续的内存空间 不能是断开的 (2).因为是连续的内存空间 才可以使用下标来访问 所以访问效率高 (3).在数据前面插入和删除的效率都比较低(需要移动数据) 链表: 当前元素保...
2019-08-19 19:35:56
466
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅