自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 内存分配--堆和栈

内存分配1、栈(stack)内存由系统自动分配,自动释放,分配的位置和大小无法主动控制2、堆(heap)主动申请和释放,new、malloc等函数分配内存3、堆和栈的主要区别① 申请方式int a; //系统自动分配内存int *p = new int a[4]; //主动申请内存,调用delete[]释放内存② 效率栈:windows下系统预留栈的空间一般为2M,只要申请的内存大小小于剩余的可用栈 大小,系统立马分配,否则报错,GetlastError();堆:操作系统有

2022-05-09 19:32:39 1558

原创 SOCKET函数详解

socket原理1.socketsocket位于应用层和TCP/IP协议通信中间,抽象成一组接口1.服务端首先初始化Socket(),然后和接口进行绑定bind()和监听listen(),然后调用accept()进行阻塞。2.客户端初始化socket(),然后调用connect()与服务端进行连接,然后客户端负责发送请求,服务端接收并且处理请求。write(),read().2.socket的基本操作1.socket()函数int socket(int domain, int type, i

2021-07-21 20:43:24 21861 4

原创 Linux文件末尾追加数据

void AppendDataToFile(char* filePath, char* msg){ // 以附加方式打开可读/写的文件, 如果没有此文件则会进行创建,然后以附加方式打开可读/写的文件 FILE* fp = fopen(filePath, "a+"); if (fp==0) { printf("can't open log file\n"); return; } fseek(fp, 0, SEEK_EN

2021-04-21 10:15:43 413

原创 SIP协议抓包分析

第一步:UAC --> UASUAC向UAS发送注册信息:Request-Line: REGISTER sip:192.168.35.165:5060 SIP/2.0Method: REGISTERRequest-URI: sip:192.168.35.165:5060Via: SIP/2.0/UDP 192.168.35.165:5080;rport;branch=z9hG4bK648439518From: <sip:34020000001320000003@340200000&g

2021-03-24 16:14:46 2307

原创 Shell获取PID结束进程

kill -9 $(pidof "name")

2021-03-19 14:51:26 320

原创 Linux环境下遍历文件所有内容

#include <dirent.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h>int count = 0; void dir_scan(char *path, char *file) { struct stat s; .

2021-03-19 14:47:42 443

原创 实时视音频点播

实时视音频点播基本要求1.实时视音频点播采用SIP协议中的Invite方法实现会话连接,采用RTP/RTCP协议实现媒体传输。2.实时视音频点播的信令流程分为客户端主动发起和第三方呼叫控制两种方式 (第三方呼叫控制的第三方控制者宜采用背靠背用户代理实现(B2BUA)信令流程一.客户端发起(1)媒体流接收者向SIP服务器发送Invite消息,消息头域中携带Subject字段,表明点播的视频源ID、发送方媒体流序列号、媒体流接收者ID、接收端媒体流序列号等参数(2)SIP服务器收到Invit

2021-03-19 14:32:55 439

原创 SIP协议解读

SIP协议基本通信要求1.用户定位服务2.会话建立3.会话参与方管理4.特点的有限确定ps: sip协议消息是基于文本的,易于读取和调试(应用层协议)SIP会话的构成SIP协议 用户代理(UA): 创建和管理SIP协议(手机,pc等),用户代理服务器对消息进行响应SIP协议注册服务器: 检查索取方IP地址信息等,发送给SIP协议代理服务器SIP协议代理服务器: 接受UA会话及IP地址等信息,发回信息SIP协议重定向服务器: 允许SIP协议服务器将SIP协议会话邀请重定向到外部在同一域中

2021-03-19 13:40:15 1510

原创 C++ 获取文件夹下的所有文件名

首先了解一下这个结构体struct _finddata_t { unsigned attrib; time_t time_create; time_t time_access; time_t time_write; _fsize_t size; char name[260];};其中各成员变量的含义如下:unsigned atrrib: 文件属性的存储位置。它存储一个unsigned单

2021-03-08 17:11:49 530

原创 C++ 实现读取文本文件(按行读取)

#include <iostream>#include <string>#include "fstream"using namespace std;int main(){ string label_file = "/home/wwh/Documents/caffe_files/resnet-18/labels.txt"; std::ifstream labels(label_file.c_str()); if(!labels.is_open()){

2021-03-08 15:59:41 1470

原创 try-catch-finally运行顺序

结论:不管有没有出现异常,finally代码块都会执行;不管try和catch的代码块中有return时,finally仍会执行,且如果finally代码块也有return,则此代码肯定会返回finally执行的return值。分有return和没有return来讨论try-catch-finally执行顺序的情况:1 无return举个例子:try { t(); tt();} catch (Exception e) { c();} finally { f(

2021-03-05 13:30:31 139

原创 Linux--fork()函数

一fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。二fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:1)在父进程中,fork返回新创建子进程的进程ID;2)在子进

2020-12-02 13:41:20 1759

原创 五种网络营销方法

一、论坛营销一、论坛营销步骤1、收集整理论坛。挑选出适合企业开展网络营销活动的论坛。2、注册帐号。首先要让账号可信,账号还要便于管理,并且还要注册部分马甲。使帐号更加正式,增强帐号的可信度。3、软文发布。将事先撰写好的软文发布到论坛相应的版块,保证软文内容和版块主题的一致性,必要时可根据版面内容调整文章标题或内容,使软文最大限度贴近主题。4、跟踪回访。主要包括发帖整理和定期回访。5、帐号维护。对于热门论坛,需要培养高级帐号,使用该高级帐号与论坛成员建立互动关系。6、效果评估。效果评估参数:发布

2020-05-31 15:11:50 964

原创 网络营销的特点

市场营销中最重要也最本质的是组织和个人之间进行信息传播和交换。如果没有信息交换,那么交易也就是无本之源。正因如此,互联网具有营销所要求的某些特性,使得网络营销呈现出一些特点。目前对于网络营销的特点,那么接下来就为大家介绍介绍网络营销的一些特点。1、时域性营销的最终目的是占有市场份额,由于互联网能够超越时间约束和空间限制进行信息交换,使得营销脱离时空限制进行交易变成可能,企业有了更多时间和更大的空间进行营销,可每周7天,每天24小时随时随地的提供全球性营销服务。2、富媒性互联网被设计成可以传输多种

2020-05-31 13:57:40 842

原创 解决枚举类型中成员随机输出问题

在我们创建了一个枚举类之后,如果需要随机的输出枚举成员,只需要随机的设置对应范围的枚举成员的值,然后对应枚举类中的成员进行输出。例如:from enum import EnumMonth = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))for name, member in Month.__members__.items(): print(

2020-05-12 20:04:58 327

转载 C++内存对齐详解

struct/class/union内存对齐原则有四个:1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/cl...

2020-04-28 11:58:22 251

原创 #include<algotithm>函数功能一览表

非修改性序列操作(12个)循环对序列中的每个元素执行某操作for_each()查找在序列中找出某个值的第一次出现的位置find()在序列中找出符合某谓词的第一个元素find_if()在序列中找出一子序列的最后一次出现的位置find_end()在序列中找出第一次出现指定值集中之值的位置find_first_of()在序列中找出相邻的一对值adjacent_find(...

2020-04-17 18:48:16 314

原创 C++之数组指针和指针数组的区别(复习)

数组指针(行指针) int(*p)[n];()的优先级比较高,所以首先p是一个指针,指向一个整形数组。n为数组的长度,且当我们要执行p+1时,需要运行n个int型数据。例如将二维数组赋予一指针,则:int a[3][4];int (*p)[4]; //定义一个数组指针,指向含有4个元素的数组p = a; // 将二维数组的首地址赋予a,a[0][0]p++; //将该语句执行,...

2020-04-16 20:24:34 152

原创 C++之块注释符技巧

在 /* *和 * / 注释内部,//字符没有任何特殊的意义。同样在//注释中,/ * 与 */ 也没有任何意义。块注释符(/* …*/)是不可以嵌套使用的。在执行code代码时,可以使用#if 0 ... #endif 来实现注释,并且可以实现嵌套,格式为:#if 0 code #enif同时你可以把#if 0改正#if 1来code代码,在调试程序时,测试时用#if...

2020-04-16 11:36:38 2365

空空如也

空空如也

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

TA关注的人

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