自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

XiaoMingCL的博客

学习笔记和体会。

  • 博客(52)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 IMX.6ULL基于Linux-5.10 DRM框架LCD驱动移植

IMX.6ULL基于Linux-5.10 DRM框架LCD驱动移植

2022-04-27 20:11:04 1232 4

原创 U-BOOT dns lookup of www.baidu.com failed, check setup␊

记得设置网关ip、子网掩码就可以解决问题。

2021-12-04 19:46:10 634 4

原创 关于SciTE5.1.1版本提示“‘lua5.1‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件”的问题

问题如标题。解决方法:1.首先你需要安装lua解释器,并将其目录加入环境变量中。下图是我的配置2.打开SciTE–>Options–>lua.properties拉到最下面,下图是更改前更改后:注释红色箭头的两行,绿箭头所指是新增的。1.将原本中的luac5.1改为KaTeX parse error: Undefined control sequence: \luac at position 10: (LUA_DEV)\̲l̲u̲a̲c̲.exe。LUA_DEV就是前…(L

2021-08-31 16:52:48 711

翻译 Ibssh2_hostkey_hash ——返回远程主机密钥的哈希值

#include <libssh2.h>const char * libssh2_hostkey_hash(LIBSSH2_SESSION *session, int hash_type); 1.描述session——libssh2_session_init_ex返回的会话实例hash_type以下之一: LIBSSH2_HOSTKEY_HASH_MD5, LIBSSH2_HOSTKEY_HASH_SHA1, LIBSSH2_HOSTKEY_HASH_SHA256。2.返回

2021-05-07 14:18:52 483

翻译 libssh2_session_handshake——执行SSH握手

#include <libssh2.h>int libssh2_session_handshake(LIBSSH2_SESSION *session, libssh2_socket_t socket); 1.描述session ——由libssh2_session_init_ex返回的会话实例socket ——连接的套接字描述符。通常,协议中的TCP连接允许任何可靠的传输,库将尝试使用任何berkeley套接字。开始与连接主机的传输层协议协商。套接字是网络通信路径的本地端点的抽象

2021-05-07 14:11:35 2758 5

翻译 Libssh2_session_set_blocking -设置或清除会话阻塞模式

#include <libssh2.h>void libssh2_session_set_blocking(LIBSSH2_SESSION *session, int blocking); 1.描述session -由libssh2_session_init_ex返回的会话实例blocking -设置为非0值使通道阻塞,或设置为0使通道非阻塞。 设置或清除会话上选择的阻塞模式。这将立即影响与此会话关联的任何通道。 如果在当前没有可用数据的会话上执行读操作,阻塞会话将等

2021-05-07 14:03:53 693

翻译 libssh2_session_init是libssh2_session_init_ex调用的便利宏

#include <libssh2.h>LIBSSH2_SESSION * libssh2_session_init(void); 1.描述初始化SSH会话对象。myalloc-自定义分配器函数。有关实现分配器回调的信息,请参阅“回调”部分。传递NULL值以使用默认系统分配器。myfree-定制的解除分配器功能。有关实现deallocator回调的信息,请参阅“回调”部分。传递NULL值以使用默认的系统解除分配器。myrealloc-自定义重新分配器功能。有关实现重新分配器回调的

2021-05-07 13:57:46 320

翻译 libssh2_init()——全局库初始化

#include <libssh2.h>#define LIBSSH2_INIT_NO_CRYPTO 0x0001int libssh2_init(int flags); 2.描述初始化libssh2函数。通常会初始化加密库。它使用全局状态,并且不是线程安全的——您必须确保该函数不会并发调用。flag参数通常为0。3.返回值:如果成功,则返回0;如果错误,则返回负值。...

2021-05-07 13:47:56 514

原创 Ubuntu无网络图标

在shell中执行下面三个命令即可解决sudo service network-manager stopsudo rm /var/lib/NetworkManager/NetworkManager.statesudo service network-manager start

2021-04-25 21:59:04 147

原创 ubuntu中不存在 xinetd.config文件的问题

ubuntu不自带xinetd,需要手动安装。执行下列命令安装完成即可sudo apt-get install xinetd

2021-04-22 17:34:34 263

原创 绑定端口时报错Address already in use

刚关闭连接,马上又bind端口,可能报错:Address already in use。这可能是端口处于TIME_WAIT状态,等待两分钟后才能再次被使用。如果要马上可用,可以使用以下方法实现://包含头文件#include <sys/types.h> #include <sys/socket.h>int opt=1;unsigned len=sizeof(opt);setsockopt(listnnfd,SOL_SOCKET,SO_REUSEADDR

2021-04-20 13:58:52 533

原创 const

修饰变量为只读(如果要修改变量的值,需要修改其地址类型)const int *p; const修饰的是 * 而不是p。表示 * p 只读,p可读可写,不能更改 *p 的内容。int * constp; const修饰的是p,表示p只读,*p可读可写。不能改变p的指向const int * const p; p只读 ,*p只读。...

2021-04-08 20:14:17 59

原创 c语言字符串处理

相关的函数strchr 字符匹配函数strstr 字符串匹配memset 内存空间填充函数atoi/atol/atof 字符串转换strtok 字符串分割1.strchr字符匹配函数在参数 str 所指向的字符串中搜索第一次出现字符c(一个无符号字)的位置。char *strchr(const char *str, int c) 参数说明:str – 要被检索的 C 字符串。c – 在 str 中要搜索的字符。返回值该函数返回在字符串 str 中第一次出

2021-04-08 20:09:41 474

原创 const修饰成员函数和对象

const 修饰成员函数成员函数后加const后我们称这个函数为常函数,它不可以修改成员属性, 关键字 mutable 修饰的成员属性例外常函数表明自己不会对这个对象的数据成员(准确地说是非静态数据成员)作任何改变。 Hello(void)const;const 修饰对象:声明对象前加 const 称该对象为常对象常对象只能调用常函数。例如:class A{public: void myfunc(void) const //const修饰成员函数,常函数 .

2021-04-08 17:36:44 224

原创 C++ this指针

C++的封装性:将数据和方法封装在一起,数据和方法分开存储,方法是共享的。在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。(系统自动传入对象的地址,以区别不同对象)友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。使用:1.形参同名 void Hello(int i) { this->i = i; cout

2021-04-08 17:27:57 67

原创 使用静态成员实现单例模式

单例 Singleton 是设计模式的一种,特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例;具体运用场景如:设备管理器,系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动;数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取;C++单例的实现全局只有一个实例:static 特性,同时禁止用户自己声明并定义实例(把构造函数设为 private)线程安全禁止赋值和拷贝用户通过接口获取实例:使用 static 类成

2021-04-08 17:24:45 296

原创 C++静态成员及const修饰静态成员

使用 static 关键字来把类成员定义为静态的。这里所说的静态成员包括静态成员变量和静态成员函数。这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为 0。静态成员在类中声明,在类外定义和初始化。在类外使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。静态变量在对象还没有创建时就已经分配了空间,不占类空间 。//举例class cla{public:

2021-04-08 15:52:19 895

原创 delete不要释放类空指针

类指针类型如果为空, delete 释放空间,则不会执行析构函数。系统根据指针类型进行相应操作,void是空类型,无法从中寻找析构函数,因此不会调用析构函数。#include <iostream>using namespace std;class A{public: A() { cout << "构造函数" << endl; } ~A() { cout << "执行析构" &

2021-04-08 15:27:39 491

原创 socket编程——c语言封装——c++封装(一对一对话)

一、不封装server.c/* 服务端程序,客户端成功连接后,会向本服务程序发送一个字符串,收到后需要回复,才能继续进行。 双方通过scanf从控制台获取字符串,来发送消息,当输入exit后退出程序 注意:客户端和服务端收到消息后,需要回复才能正常传输信息,因为recv函数会阻塞程序。*/#include <stdio.h>#include <string.h>#include <unistd.h>#include <stdli

2021-04-08 14:48:11 446

原创 fwrite、fgets、fprintf、fscanf、

#include <stdio.h>#include <string.h>#define _CRT_SECURE_NO_WARNINGSint main(){ char* str = "世界,\n你好。"; FILE* file = NULL; file = fopen("C:\\Users\\xx\\Desktop\\test.txt", "r+"); //此处的路径需要根据实际情况更改 if (file==NULL) { //判断是否成功打开文件

2021-04-01 17:08:06 346

原创 C++ 动态对象创建 对象数组

首先说说内存申请函数:malloc、calloc、realloc返回一个 void 指针,C++不允许将 void 指针赋值给其他任何指针,必须强转。malloc、calloc、realloc可能申请内存失败,所以必须根据返回值确定是否申请成功。malloc、calloc、realloc不会调用构造函数 ,free释放堆区不会调用析构函数(重要)。C++提供了另外的申请内存空间的关键字:newnew 与 malloc函数相比,其主要的优点是, new 不只是分配了内存,它还创建了对象。new

2021-03-27 21:14:36 2979

原创 C++ explicit关键字

explicit 关键字只能用于修饰只有一个参数(或除了第一参数外,其他参数都有默认值的多参)的构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的,禁止通过构造函数进行隐式转换,声明为explicit的构造函数不能在隐式转换中使用。跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。需要注意点是,该关键字修饰的构造函数禁止的是进行隐式转换而不是禁止隐式调用,因此被explicit 修饰的构造函数可以隐式调用。隐式调用、显示调用举例:

2021-03-27 20:53:14 49

原创 C++初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。//形式: Point::Point(int x_, int y_): x(x_), y(y_) //x_,y_为类构造函数的形式参数,x,y为类的成员变量 { }用处:除了性能问题之外,有些时候合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表 1.需要初始化const修饰的类成员或初始化引用成员数据,这些都是需要定义的同时赋值的,一定初始化完成,就不能更改。 2

2021-03-27 20:33:48 93

原创 C++深拷贝和浅拷贝

浅拷贝:两个对象指针指向同一个区域,(析构)类中有指针成员时,容易造成重复释放空间。因为存在指针成员时,浅拷贝直接将指针的值赋值给另一对象的同名成员变量。为了解决这个问题,需要定义类的拷贝构造函数,进行深拷贝。例如: Point::Point(const Point& p) { //独立申请空间(malloc、calloc、realloc、new) this->ptr=new char; *this->ptr=*p.ptr; }深拷贝:不

2021-03-17 22:50:47 144

原创 C++构造函数和析构函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行,名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void 。构造函数可用于为某些成员变量设置初始值。可重载。类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行,名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。析构函数的调用时机: 1.对象生命周期结束,自动销毁;(如对象作为参数进行

2021-02-08 11:45:07 77

原创 C++类概念、大小及声明定义

类的概念类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。 定义一个类,本质上是定义一个数据类型的蓝图。它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。 类访问修饰符 类成员可以被定义为 public、private 或 protected。默认情况下是定义为 privat

2021-02-08 11:15:57 434

原创 语言字符串操作之strlen、strcpy 、strncpy、strcat 、strncat、strcmp、strncmp

字符串的操作主要包含字符串的拷贝、连接、比较、切割、变换等操作。//字符串操作函数 #include <string.h> //使用这些函数需要包含的头文件 1.strlen //测量字符串的长度,不包含结束符 2.strcpy/strncpy //字符串拷贝 3.strcat/strncat //连接 4.strcmp/strncmp //比较//共同特点:遇到'/0'自动结束strlen长度测量函数原型

2021-02-08 11:03:47 199

原创 C语言内存相关free、calloc、realloc函数

free函数原型: void free(void *ptr); //*ptr是申请的内存空间地址只能释放 malloc calloc realloc 动态申请的内存calloc函数原型: void * calloc(size_t nmemb,size_t size);在内存堆中,申请nmemb块,每块大小为size个字节数的连续区域例: char * p=(char *) calloc (3,100);malloc内存中存放的内容是随机的,calloc函数申请的内存内容为0。也就是说

2021-02-08 10:45:16 161

原创 内存空间分配函数 malloc

函数原型: void *malloc( unsigned int num bytes );调用形式: (类型*)malloc(size)num是需要申请的字节数,单位是字节。因为malloc函数返回的是void类型的指针,申请得到的空间地址需要强制转换为需要的类型。示例:#include "stdio.h"#include <stdlib.h>#include <string.h> int main() { int *p=(int*)malloc(s

2021-01-29 17:42:33 175

原创 指针作为函数的返回值、函数指针、类似多态

指针作为函数的返回值时,不要返回局部变量的地址,因为函数返回,局部变量空间被释放,值不确定。函数指针:定义 : 类型(*指针名)(要指向函数的所拥有的形参类型…)int (*func)(int,int);需要注意的是:对函数指针解引用无意义 。类似多态( 通过传入不同的函数指针实现多个功能):形式: 类型 函数名(普通参数…,函数指针)void test(int(*func)(int,int),int a,int b){ //函数体}a,b是函数test 的形参。...

2021-01-29 17:38:01 249

原创 C++与C混合编程

#if __cplusplusextern "C" { #endif void add_(int a, int b); /*要使用C编译器编译的函数*/#if __cplusplus }#endif因为C的编译器不支持 extern “C” 语法。这里要引出一个宏, __cplusplus, 只要是C++文件, 编译器就会自动定义一个这样的宏,使用该宏就能达到C++和C混编译的目的。extern “C” 中的C不是指C语言这一门语言, 而是表示一种编译和链接的规约. C表

2021-01-29 17:33:33 223

原创 c++函数重载(多态特性)

在同一个作用域内,可以声明几个功能类似的同名函数, 但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。不能仅通过返回类型的不同来重载函数。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 void print(int a ) void print(int a, int b = 15) {

2021-01-29 17:26:14 231

原创 C语言 指针变量、一维数组名、二维数组名作为函数参数

指针变量作为函数参数如果想在函数内部修改外部变量的值,就需要传递外部变量的地址(以指针变量作为函数的参数)在函数内部更改指针变量的值(在函数内部给指针变量赋值,就必须传递指针变量的地址)一维数组名作为函数的形参想在函数内部操作外部数组的元素,需要传递数组名,因为数组名是数组的首地址一维数组作为函数形参会被优化为指针二维数组名作为函数的形参二维数组作为函数形参会被优化为数组指针(二维数组的元素是数组)...

2021-01-25 14:24:48 736

原创 C语言 指向同一数组的两个指针变量间的关系

指向同一数组的两个指针变量 相减 表示 相差元素个数,可以 比较 地址编号大小,两个指针变量不能相加指针变量加一个数表示 跳过(指针变量类型的字节数)*(这个数)的字节数数组名[ 不越界的情况下可以为复负数 ],表示当前地址+或-这个数指针数组存放地址的数组,本质是数组,只不过每个元素是地址数组指针本质是指针,存放数组的地址二维数组名代表二维数组首行地址对行地址解引用得到 当前行第0个元素地址...

2021-01-25 14:18:31 2157

原创 C++函数的默认参数和占位参数

默认参数参数的默认值,当您定义一个函数,您可以为参数列表中后边的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。默认参数后的所有参数都必须设置默认值。函数声明和函数定义分开写时:不能同时设置默认参数; 分文件时,定义处的默认参数无效,仅声明处设置有效。示例: int sum(int a, int b=20, int c=20) { int result; result = a + b + c; return (result);

2021-01-25 14:10:24 374 1

原创 内联函数

使用内联函数的目的:为了克服宏函数即宏的缺点 (宏的缺点是没有作用域概念,无法进行参数检查,只是单纯的替换)。内联函数 继承了 宏函数的效率,没有函数调用(出入栈的开销)的开销,可以进行参数传递、返回值类型的安全检查,又可以作为类的成员函数。C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译使用该函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。如果已定义

2021-01-25 14:08:17 130

原创 C++中的引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。(必须初始化),不占空间,不开辟空间,引用和被引用变量拥有相同的地址引用一旦初始化,就不能修改指向举例: int i = 17; int& r = i; 定义并初始化引用变量( r 完全等价于 i )对数组的引用示例: int a[5] = {10, 15, 30, 12, 80}; 用 typedef 定义数组类型 t

2021-01-21 20:18:26 60

原创 C++相对于C的增强

1.C++更严格的语法、更严格的类型转换更严格的语法:C语言中 int a=0; 赋值当作定义int a; 未赋值当作声明这在C++中 冲突更严格的类型转换:C++不同类型的变量一般不能直接赋值,需要相应的强制转换新增 bool 类型,有 true 、 false,一个字节2.struct类型增强:C++中定义结构体变量不必加 struct 且可以定义成员函数struct A{ int a = 10; char b[32]; void func(vo

2021-01-21 20:08:27 130

原创 C指针变量的类型及强制转换

在32位平台,任何类型的地址都是4字节。类型两个类型:指针变量自身类型以及所指向的类型指针取值宽度:由指针变量指向的类型长度决定指针跨度: 由指针变量指向的类型长度决定强制转换char* p;(short*)p; 改变指针取值宽度和跨度局部指针变量不初始化保存的是随机地址void* 可以定义变量, void 不可以void* 定义的变量叫万能指针,可以保存任何一级指针,但是 不能解引用,需要 转换类型 未初始化的指针不能解引用(引发段错误) 不要直接给

2021-01-21 19:24:05 405

原创 C语言中数据的存取形式

存:​ 以十六进制 、 八进制赋值是以原码存储数据越界也是以原码存储负数在计算机存储的是补码取:​ 有符号(%d)取 看最高位是否为1,是1取原码 ;不为1原样取

2021-01-21 19:16:11 222 1

socket编程——c语言封装——c++封装(一对一对话).zip

socket编程——c语言封装——c++封装(一对一对话).zip

2021-04-08

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

TA关注的人

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