自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 linux - 静态库动态库

静态库动态库静态库静态库制作步骤;编译为.o文件将.o文件打包 打包命令:ar rcs将头文件与库一起发布 ar rcs libCalc.a *.o发布的时候需发布头文件与.a文件动态库编与代码,生成.o文件,gcc参数-fPICgcc -shared 命令编译进去动态库会提示找不到的问题,编辑vi /etc/ld.so.conf/usr/local/lib_test...

2021-07-25 18:25:06 66

原创 linux - Vim

vim快捷键删除x删除光标所在字母X删除光标前字母dw删除单词d0删除光标到行首d$(d)删除到行尾dd删除光标所在行ndd 删除刚表所在行的n行复制粘贴yy复制一行dd剪切一行nyy 复制n行内容p/P粘贴r替换可视模式v进入可视模式按y复制d删除p粘贴...

2021-07-25 06:38:53 116

原创 C++ - 类

类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程技术。类的接口包含用户所能执行的操作;类型的实现则包含了类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数;定义抽象数据类型类背后的基本思想:数据抽象(data abstraction)和封装(encapsulation)。数据抽象是一种依赖于接口(interface)和实现(implementation)分离的编程技术。类成员必须在类的内部声明,不能在其他地方增加成员。成员可以是数据,函数,类型别名。类成员

2021-01-26 13:21:23 148

原创 C++ - 函数深入

2021-01-26 02:44:49 98

原创 C++ - 函数

如何使用函数来处理数组、字符串和结构,并且学习赌鬼和函数指针;函数函数参数和按值传递C++通常按值传递参数给函数,而后者将其赋给一个新的变量;**在函数内部声明的变量包含参数是该函数私有的。**在函数被调用时,计算机为这些变量分配内存;在函数结束后,计算机释放这些变量使用的内存;多个参数#include <iostream>using namespace std;void n_char(char, int);int _tmain(int argc, _TCHAR* argv[]

2021-01-26 00:03:35 94

原创 C++ - 复合类型

复合类型数组数组是一种书类型,能够存储多个同类型的值。每个值都存储在独立的数组元素中,计算机在内存中依次存储数组的各个元素;数组的很多用途是基于这样的一个事实,可以单独访问数组元素,方法是使用下标来索引对元素进行编号,C++数组从0开始编号;编译器不会检查使用的下标是否被使用int _tmain(int argc, _TCHAR* argv[]){ using namespace std; int yams[3]; // creates array with three eleme

2021-01-25 00:29:28 167

原创 C++ - 语句

通常情况下,语句是顺序执行的。但除非是最简单的程序,否则仅有顺序执行远远不够;因此,C++提供了一组控制流语句以执行更复杂的执行流;语句简单语句C++语言中的大多数语句都以分号结束;表达式语句的作用是执行表达式并且丢掉求职结果;空语句最简单的语句是空语句,空语句中只含有一个单独的分号:; //空语句如果在程序的某个地方,语法上需要一条语句但逻辑不需要,此时需要空语句;复合语句符合语句是用花括号括起来的语句和声明的序列,符合语句也被称为块。一个块就是一个作用域,在块中引入的名字只能在块

2021-01-23 12:26:01 228

原创 c++ - 表达式

表达式由一个或多个运算对象组成,对表达式求职将得到一个结果。字面值和变量是最简单的表达式,其结果就是字面值和变量的值。表达式基础基础概念C++定义了一元运算符和二元运算符。...

2021-01-22 00:43:41 396

原创 c++ - vector

vector的数据安排以及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。Array是静态空间,一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的数据搬往新空间,再释放原来的空间。Vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必害怕空间不足而一开始就要求一个大块头的array了。vectorvector迭代器

2021-01-17 17:21:31 79

原创 c++ - string

stringstring容器基本概念C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件。String和c风格字符串对比:Char是一个指针,String是一个类string封装了char,管理这个字符串,是一个char*型的容器。String封装了很多实用的成员方法查找find,拷贝copy,删除delete 替换replace,插入insert不用考虑内存释放和越界string管理char*所分配的内存。每

2021-01-17 16:28:18 69

原创 c++ - 异常

将问题检测和问题处理相分离;在异常处理过程中,由问题检测代码可以抛出一个对象给问题处理代码,通过这个对象的类型和内容,实际上完成了两个部分的通信,通信的内容是“出现了什么错误”。当然,各种语言对异常的具体实现有着或多或少的区别,但是这个通信的思想是不变的。异常异常基本概念在Win32中,获取异常可以使用GetLastError函数来获取上一个错误;在C语言的世界中,对错误的处理总是围绕着两种方法:一是使用整型的返回值标识错误;二是使用errno宏(可以简单的理解为一个全局整型变量)去记录错误。当然

2021-01-16 22:34:15 106

原创 c++ - 类型转换

类型转化是将一种数据类型转换成另外一种数据类型;类型转换静态转换父子转换用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。// demo01_类型转换.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace s

2021-01-16 14:28:32 77

原创 c++ - 字符串、向量和数组

c++定义了内容丰富的抽象数据类型库,其中,string和vector是两种最重要的标准库,string支持可变字符串,vector支持可变长合集;内置数组是一种更基础的类型,string和vector都是对它的某种抽象;字符串向量和数组命名空间using声明我们大部分使用的库函数都属于命名空间std中,而程序也显式的将这一点标识出来。有using声明就无需专门的前缀也可以使用所需的名字。#include <iostream>using std::cin;int _tmain(i

2021-01-15 16:58:30 210

原创 socket - 三次握手四次挥手

TCP是面向连接的安全的数据传输, 在客户端与服务端建立建立的时候要经过三次握手的过程, 在客户端与服务端断开连接的时候要经历四次挥手的过程, 下图是客户端与服务端三次握手建立连接, 数据传输和断开连接四次挥手的全过程.概念SYN: 表示请求, ACK:表示确认服务端发送的SYN和客户端发送的SYN本身也会占1位.SYS----->synchronousACK----->acknowledgementFIN------>finish三次握手和四次挥手的过程都是在内核实现的.

2020-12-27 18:31:24 400

原创 数据结构 - 线性表

线性表线性表定义线性表是零个或多个数据元素的集合,线性表中的数据元素是有序的;线性表中的数据元素个数是有限的;线性表中的数据元素的类型必须相同线性表顺序实现SeqList.h#ifndef __MY_SEQLIST_H__ #define __MY_SEQLIST_H__typedef void SeqList;typedef void SeqListNode;SeqList* SeqList_Create(int capacity);int SeqList_Create01

2020-12-25 10:48:41 114

原创 C++ - STL

STLvectorVectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。#include <iostream>#include <vector>using namespace std;void print(vector<int> &c) //数组做参数,会退化为指针{ int size

2020-12-15 16:43:48 99

原创 C++ - 类模板

类模板人们需要编写多个形式和功能都相似的函数,因此有了函数模板来减少重复劳动;人们也需要编写多个形式和功能都相似的类,于是 C++ 引人了类模板的概念,编译器从类模板可以自动生成多个类,避免了程序员的重复劳动。基础语法#include <iostream>using namespace std;//类模板的创建template<typename T>class A{public: A() { ; } T GetA() { return a; }

2020-12-15 15:56:07 139 1

原创 C++ - 函数模板

文章目录函数模板函数模板模板说明声明加强模板函数重载函数模板模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属;模板用于表达逻辑结构相同,但是具体数据元素不同的数据对象的通用行为;函数模板模板说明重载函数使编程变得方便,因为对于执行类似操作的一组函数,只要记住一个函数名称即可。但是,每个函数都必须单独编写。声明函数模板定义由模板说明和函数定义组成;模板说明的类属参数必须在函数定义中至少出现一次;函数参数表中可以使用类属类型参数,也可以使用一般类型参数;#include

2020-12-15 11:28:52 69

原创 C++ - 函数指针

函数指针基础如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。函数指针用于指向一个函数函数名是执行函数体的入口地址1)可通过函数类型定义函数指针: FuncType* pointer;2)也可以直接定义:type (*pointer)(parameter list);- pointer为函数指针变量名-

2020-12-15 10:29:19 107

原创 linux - 网络基础

网络基础网络应用程序设计模式C/S - client/server1) 优点: 1. 协议选用灵活 2. 可以缓存数据2) 缺点: 1. 对用户安全构成威胁 2. 开发工作量大, 调试困难B/S - browser/server1) 优点: 跨平台2) 缺点: 只能使用http协议的概念规则: 数据传输和数据解释的规则原始协议 ------>(改进、完善)------> 标准协议典型协议:TCP/UDP HTTP FTP IP ARP分层模型七层模型

2020-12-14 13:53:01 53

原创 linux - 套接字编程

文章目录套接字编程socket函数connect函数bind函数listenaccept函数套接字编程套接字,也叫socket,是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户。网络通信,说白了就是进程间的通信(同一台机器上不同进程或者不同计算机上的进程间通信)。在网络中,每一台计算机或者路由都有一个网络地址,就是IP地址。两个进程通信时,首先要确定各自所在的网络节点的网络地址。但是,网络地址只能确定进程所在的计算机,而一台计算机上一般都是同时运行着多个进程,所以仅凭网络地址还不能确

2020-12-13 17:03:33 361

原创 linux - 套接字简介

文章目录套接字套接字结构IPV4套接字结构通用套接字结构IPV6套接字结构新的通用套接字结构套接字结构比较参数字节序字节序操作inet_atoninet_addrinet_ptoninet_ntopsock_ntop读写函数套接字套接字结构可以在两个方向上传递:从进程到内核,从内核到进程;套接字结构大多数套接字都需要一个指向套接字地址结构的指针作为参数,每个协议族都定义它自己的套接字地址结构;IPV4套接字结构IPV4套接字结构通常成为"网际套接字地址结构",它以sockaddr_in命名,命名

2020-12-13 11:28:05 258

原创 linux - 题目

文章目录题目题目1.请编写一个程序,设置SIGINT和SIGQUIT信号,并在该程序中实现从文件中读取信息的操作,并保证在读取文件且只有在读取文件的过程中不会被发送的SIGINT和SIGQUIT信号所打断。//请编写一个程序,设置SIGINT和SIGQUIT信号,并在该程序中实现从文件中读取信息的操作,并保证在读取文件且只有在读取文件的过程中不会被发送的SIGINT和SIGQUIT信号所打断。#include <unistd.h>#include <sys/stat.h>

2020-12-11 12:42:43 236

原创 linux - 线程同步

线程同步

2020-12-08 00:17:08 208

原创 linux - 守护进程

守护进程

2020-12-08 00:15:53 122

原创 linux - 信号

信号概念信号是Linux编程中非常重要的部分,信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。信号机制进程A给进程B发送信号,进程B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕后再继续执行。与硬件中断类似——异步模式。但信号是软件层面上实现的中断,早期常被称为“软中断”。每个进程收到的所有的信号,都是由内核负责发送的信号状态

2020-12-07 21:24:12 155

原创 linux - 文件操作

文件操作文件IO由操作系统实现并提供给外部应用程序的编程接口。(Application Programming Interface,API)。是应用程序同系统之间数据交互的桥梁。文件描述符一个进程启动之后,默认打开三个文件描述符:#define STDIN_FILENO 0#define STDOUT_FILENO 1#define STDERR_FILENO 2新打开文件返回文件描述符表中未使用的最小文件描述符, 调用open函数可以打

2020-12-07 07:49:29 126

原创 linux - 库

库库是二进制文件,是源代码文件的另一种表达形式,是加密后的源代码;提供一些功能相似的函数的集合体动态库动态库也可以成为共享库,在程序编译时并不会被链接到代码中,而是在程序运行时才被装入,不同的用程序调用相同的库,那么在内存中只需要一份该共享库的拷贝,避免浪费空间;静态库制作:准备三个文件://head.hvoid fun3(); //生命两个函数void fun4();//fun1.c#include <stdio.h>void fun3(){ pri

2020-12-07 07:48:13 73

原创 linux - 进程

进程进程概念触发 任何一个事件时,系统都会将他定义成为一个进程,并且给予这个进程一个 ID ,称为 PID,同时依据启发这个进程的用户与相关属性关系,给予这个 PID 一组有效的权限设定。并行和并发并发的概念是:并发,在一个时间段内, 是在同一个cpu上, 同时运行多个程序。如:若将CPU的1S的时间分成1000个时间片,每个进程执行完一个时间片必须无条件让出CPU的使用权,这样1S中就可以执行1000个进程。并行性指两个或两个以上的程序在同一时刻发生(需要有多颗)。PCB每个进程都在

2020-12-07 07:47:11 78

原创 linux - shell

shell编程用户登录linux后,就会出现一个系统提示符号,这个就是shell,当用户登录后,实际上是进入到一个叫shell的程序中,shell的角色就是将用户输入的每个命令都翻译成linux系统能识别的指令;当shell接收到用户输入的命令后,就会开始执行,并把结果显示到屏幕上,结束后shell又会显示系统提示符,等待用户输入下一条指令;后台运行:后台运行的符号"&",在命令后加"&",即可将程序发送到后台执行;回台恢复前台执行fg命令多个进程在后台,执行jobs命令s

2020-12-07 07:45:12 86

原创 linux - makefile

makefilemakefile文件定义了一系列的规则,makefile带来的好处就是"自动化编译",一旦写好,只需要make命令,整个工程即可完成自动编译;基本规则makefile基本规则如下:目标:依赖(tab) 命令tab必须是tab键,否则报错目标:要生成的目标文件依赖:目标文件由哪些文件生成命令:gcc命令第一个makefile;makefilemain: main.c fun1.c gcc -o main main.c fun1.c//fun1.

2020-12-07 07:44:28 139

原创 linux - gdb调试

gcc -g main.c //在目标文件加入源代码的信息gdb a.out(gdb) start //开始调试(gdb) n //一条一条执行(gdb) step/s //执行下一条,如果函数进入函数(gdb) backtrace/bt //查看函数调用栈帧(gdb)

2020-12-07 07:43:34 91

原创 linux - 进程间通信

进程间通信概念linux环境下,进程地址空间相互独立,每个进程都有各自不同的用户地址空间。任何一个进程的全局变量在另一个进程中看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核;在内核中开辟一块缓冲区,进程A把数据从用户空间拷贝到内核缓冲区,进程B再从内核缓冲区把数据读取,内核提供这种机制成为进程间通信,简称IPC;通信方式如:文件、管道、信号、共享内存、消息队列、套接字、命名套接字;常用的包括不限于:管道信号共享映射区本地套接字管道概念管道是一种最基本的ipc机制,

2020-12-06 08:59:08 177

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除