自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++基础知识12——const 生成只读变量

只读变量c++语言中只有字面量初始化的const常量才能进入符号表中。当出现编译时不能确定const常量的时,const常量不能进入符号表中。而只是作为一个只读变量(当然,这个变量不能作为左值使用)。如下两种即为不确定情况:1.用其它变量初始化const常量2.被volatile修饰的const常量举例1.char a = 'x';const char& b1 = a; //这里定义一个const引用b1const int& b2 = a; //这里定义一个const引用b2

2020-08-25 13:23:16 536

原创 c++基础知识11——强制类型转换

问题:c函数的强制类型转换过于粗暴,容易引发不可知的错误,而且不容易在代码中定位。举例:typedef void(PF)(int); //定义一个函数类型int main(void){ int a = 0x12345; PF* pfunc = (PF*)a; //定义一个函数指针pfunc,指向地址0x12345 pfunc(1); //由于0x12345并非真正存在函数,故执行时会出现段错误}解决:c++提供新的4种强制类型转换,更加安全可靠。优点:编译器可帮助检查潜在问题;方便在代

2020-08-25 13:22:49 273

原创 c++基础知识10——命名空间

问题:c语言中全局变量共用同一个全局作用域,这样可能会导致命名冲突解决:c++使用命名空间概念,将全局作用域划分成一个个分立的域,这样就解决全局变量命名冲突问题命名空间空间命名方法:namespace xxx { int i; } //分配一个命名空间xxx,内部有i变量使用方法:方法1using namespace xxx; //使用xxx命名空间下的所有内容方法2using xxx::i; //仅使用xxx空间下的i变量举例:namespace First{ int i

2020-08-24 13:55:14 161

原创 c++基础知识9——动态内存分配

c语言和c++在 动态内存分配 方面的区别:1.c语言用malloc函数实现;c++用new关键字来实现。2.malloc是由c库提供的函数;new关键字是c++的一部分。(也就是说一些简单的c语言平台可能没有malloc库,也就无法支持动态内存分配。而c++则任何情况都可用)3.malloc是以字节为单位进行内存分配;new是以具体类型为单位进行分配。4.malloc在分配内存的时候不支持数据初始化;new支持同时分配和初始化数据。举例1:定义一个int型指针p,该指针指向一个动态分配的空间,

2020-08-24 13:50:21 263

原创 c++基础知识8——c++引用c代码

背景: c++需要兼容c代码,当它调用c编译器生成的目标文件时会报错。如,举例:前提条件说明——已经使用gcc生成了一个c_xxx.o的目标文件。c++文件内容如下://c++文件yyy.cpp#include "c_xxx.h" //这里包含了c代码的头文件int main(void){ c_func(); //这里调用了c代码里的函数}然后使用g++ yyy.cpp c_xxx.o进行编译,这时候会报错。解决办法:使用extern关键字,让c代码使用gcc编译,如下://c++

2020-08-24 13:41:05 693

原创 c++基础知识7——函数重载

重载函数含义:c语言中,函数如果重名会报错。c++则引入了函数重载。编译器将所有同名函数作为候选者,精确匹配实参、通过默认参数匹配实参、通过默认类型转换匹配实参等等,寻找到正确的函数;如果匹配到不唯一或匹配不到,则编译错误。本质:通过编译后生成的obj文件进行分析,可以看到同名函数在符号表中有不同的标识符,也就是说本质上重载函数是不同的函数。重载的条件:1.参数个数不同2.参数类型不同3.参数顺序不同(另外,注意函数返回值“不”作为匹配的依据)举例:int func(int a, c

2020-08-24 13:33:05 172

原创 c++基础知识6——函数参数

默认参数解释:为了防止函数调用时没有提供参数,可以在声明函数时提供函数的默认参数值举例:int func1(int a=1, int b=3); //函数声明中提供默认参数int func2(int a, int b=3); //函数声明中提供部分默认参数int func1(int a, int b) { return ((a)<(b) ? (a) : (b));}int func2(int a, int b) //函数定义没有默认参数{ return ((a)<(b)

2020-08-24 13:27:40 652

原创 c++基础知识5——内联函数

内联函数解释:程序在编译时,会将内联函数嵌入到调用处,适用于功能简单、规模较小、使用频繁的函数。格式:inline 函数体优点:没有普通函数调用的压栈、跳转、返回等操作,提高执行效率缺点:增加代码量,消耗内存空间。使用限制:为了防止编译器过于老旧,出现不能内联的现象,建议对内联函数进行如下限制——内联函数中不能有循环体、过多的条件判断语句、函数体过于庞大、异常接口声明。另外递归函数无法内联处理,不能对内联函数进行取址操作。补充说明:内联函数不同于宏代码块,宏代码块是预处理器替换操作的,而内联函数

2020-08-24 13:21:17 199

原创 c++基础知识4——引用

c++增加了引用的概念含义:引用可以看作一个已定义变量的别名格式: Type& name = var;举例:int a = 4;int& b = a; //b为a的别名b = 5; //这里操作b就是操作a,如果分别对a和b取址会发现地址相同, //也就是说c++支持对同一个地址起不同的别名。如果写成如下方式都是错的:int& b; //引用在定义的时候需要初始化,也就是需要指出b是哪一段地址的别名,这里没有初始化故报错。float& b = a;//

2020-08-24 11:31:54 289

原创 c++基础知识3——三目运算符

三目运算符的返回值c语言中:返回值为变量值,不能作为左值使用。c++中:当作为左值时直接返回变量本身,当作为右值时返回变量值。如:int a=1;int b=2(a<b ? a : b)= 3; //在c语言中此句报错,而c++则正确注意,如果返回的值中有一个是常量值,则不能作为左值使用。如下会报错:(a<b ? a : 2)=3; //在c++中会报错...

2020-08-24 11:28:40 315

原创 c++基础知识2——bool

背景:c++相对于c语言主要+了两种:1.增强数据类型种类2.面向对象开发以bool类型变量举例:在c++中增加了bool类型变量,占一个字节,其值只有两个true(1)和false(0),该值可以进行数值运算,但是最终结果还是被自动转为0或1.如:bool a = false; //这里a为0a++; //这里a为1a++; //这里a仍为1...

2020-08-24 11:25:27 167

原创 c++基础知识1——const

const在c语言和c++中的区别:一、变量和常量c语言中const变量是只读变量,c++语言中const为一个常量。举例:const int A = 1;const int B = 2;int array[A+B] = {0};c语言中:最后一句会报错,因为A和B是两个只读变量,A+B的结果只有在程序运行的时候才能知道,所以这里定义array数组的语句,在编译的时候会出错。c++语言中:由于A和B是两个常量,所以编译的时候可以直接得到结果。二、分配存储空间c语言中:const变量

2020-08-24 11:16:08 119

原创 linux应用基础知识点17-线程和线程同步

linux应用基础知识点17-线程和线程同步线程线程同步信号量互斥锁条件变量线程一个进程可以有多个线程,一个线程必属于一个进程。进程实现多任务的缺点:1.进程间切换的成本大2.进程间通信麻烦且效率低线程的引入:1.保留了进程多任务的特性2.线程间切换和通信效率更高3.多线程在多核心cpu上可实现真正并发运行。pthread_create函数int pthread_create...

2020-04-17 16:13:33 122

原创 linux应用基础知识点16-并发式IO的实现

linux应用基础知识点16-并发式IO的实现非阻塞io多路复用ioselect函数poll函数:异步io:阻塞式io带来的问题:比如当读取键盘和操作鼠标两个事件都是以阻塞方式操作的话,那么两个设备的使用顺序必须严格按照程序的流程走,否则会阻塞住无法走下去。并发式IO的实现方法:1.非阻塞io2.多路复用io3.异步通知(异步io)非阻塞io对于未打开文件在open时使用O_NON...

2020-04-17 15:28:40 131

原创 linux应用基础知识点15-IPC之Socket

linux应用基础知识点15-IPC之Socket网络通信TCP协议Socket接口TCP通信创建步骤UDP通信创建步骤网络通信网络通信其实就是位于网络中不同主机上面的2个进程之间的通信。层次:其中网卡是一个串转并设备,它与cpu是并行传输,与网络是串行传输。传输媒介:1.无线:wifi、蓝牙、zigbee、4g/5g等2.有线:双绞线、同轴电缆、光纤等开放系统互连参考模型(简称...

2020-04-17 14:58:36 246

原创 linux应用基础知识点14-IPC之共享内存

linux应用基础知识点14-IPC之共享内存用共享内存实现进程间通信,可以省却文件向进程的读取、修改、写回一系列繁琐的操作。而是直接可对该内存空间进行修改。相关函数POSIX和System V均提供了共享内存的实现函数,Linux将两种实现方式均吸纳为己所用。POSIX的函数:shm_open mmap munmap ftruncateSystemV的函数:shmget shmat s...

2020-04-17 14:33:29 144

原创 linux应用基础知识点13-IPC之消息队列

linux应用基础知识点13-IPC之消息队列消息队列可以理解为一个消息链表,一个进程可以往该链表的尾部添加特定格式的数据,另一个进程可以从头部取出数据或者按消息的类型取出数据。消息队列和管道的区别:1 . 管道在写入时,必须同时读取,否则会阻塞;消息队列则没有要求。2 . 管道在关闭或进程结束时,数据会丢失;消息队列的生命周期跟随内核,关闭后仍存在。相关函数POSIX和System ...

2020-04-17 13:48:01 100

原创 linux应用基础知识点12-IPC之信号量

linux应用基础知识点12-IPC之信号量信号量信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量为正时,说明它空闲;为0时,说明被占用。当一个资源数量为N时,意味着可以允许N个进程/线程同时使用该资源。此时,可以设置该信号量的初值为N。sem_init函数int sem_init(sem_t *sem, int pshared, unsig...

2020-04-17 11:18:25 99

原创 linux应用基础知识点11-IPC之信号

linux应用基础知识点11-IPC之信号信号信号信号是内容受限的一种异步通信机制,本质是一个预定义的数字编号。内容受限——只能传递信号值,不能传递更详细的内容。异步——事先并不知道信号何时发生,类似于中断都是突然发生的。发出者:1.终端按键2.硬件异常内核发出信号3.用户发出kill命令4.某些软件条件满足后发出信号,如alarm时钟到时间产生SIGALARM信号,向写端已关闭...

2020-04-17 10:54:40 116

原创 linux应用基础知识点10-IPC之管道

linux应用基础知识点10-IPC之管道管道管道进程间的内存是相互隔离的,可以使用管道来实现进程间通信。管道由内核在内核空间维护的一个内存区,该管道提供两个端口,都可以读写(同一时间只能一读一写 或 一写一读,即半双工通信)。无名管道:只能在父子进程间通信,实现步骤如下:1.进程用int pipe(int pipefd[2]);来创建一个管道,返回的pipefd[0] pipefd[...

2020-04-17 10:39:44 120

原创 linux应用基础知识点9-进程间通信IPC

linux应用基础知识点9-进程间通信IPC进程间通信是指不同进程间进行信息传播与交换。英文缩写IPC,全称InterProcess Communication。unix系统的操作风格主要分为两大分支:SystemV和BSD。linux博采众长,它的IPC方式:1.unix传统的方式:管道(有名管道和无名管道)、信号2.SystemV的方式:信号量、消息队列、共享内存3.BSD的方式:...

2020-04-17 10:34:52 140

原创 linux应用基础知识点8-进程-父子进程-守护进程

linux应用基础知识点8-进程进程父子进程进程的五种状态进程一个程序当它在系统中运行了以后,我们称它为进程。1.每个进程中都有一份环境变量表,该环境变量表一般继承自系统的环境变量(也可以用户自定义)。进程的环境变量表可以通过environ[i][j]全局变量对其访问,也可以通过getenv setenv函数对其操作。系统的环境变量表可以用export命令查看,也用echo $变量名 ...

2020-04-17 09:59:53 656

原创 linux应用基础知识点7-虚拟文件系统

linux应用基础知识点7-虚拟文件系统proc文件系统:sys文件系统proc文件系统:proc目录下的文件大小很多都是0,因为该文件本身并不存在,当我们读取这个文件时,内核将内部的一个数据结构读取并生成字符串内容。proc文件系统相当于提供了一个查看系统内部数据的窗口。如/proc/cmdline /proc/cpuinfo /proc/devices /proc/interrup...

2020-04-16 17:42:34 73

原创 linux应用基础知识点6-系统时间和随机数

linux应用基础知识点6-系统时间和随机数GMT时间UTC时间点时间和段时间linux系统中的时间time函数(API函数)ctime(标准C函数)gettimeofday和settimeofday函数随机数rand函数GMT时间格林尼治地区的当地时间,作为全球国际时间。UTC时间全球分为二十四个时区,每个时区有自己的时间。UTC时间等于格林尼治时间。北京是东八区,领先UTC八个小时。纽...

2020-04-16 17:40:25 245

原创 linux应用基础知识点5-文件的权限

linux应用基础知识点5-文件的权限umaskaccess函数chmod函数chown函数一些终端命令操作符umaskumask文件掩码是系统中维护的一个全局设置,它的作用是设定系统中新创建文件的默认权限的。可以使用umask xxx命令来修改其值。access函数用于检查当前用户对该文件的权限int access(const char *pathname, int mode);m...

2020-04-16 17:12:32 109

原创 linux应用基础知识点4-文件的分类和属性

linux应用基础知识点4-文件的分类和属性文本文件和二进制文件目录文件设备文件管道文件:略套接字文件:略符号链接文件各类文件的属性字符文件的属性stat函数fstat函数lstat函数文本文件和二进制文件文本文件是按照一定编码格式存储的文件(其实质也是二进制数字,不过有编码规则可循),二进制文件存储的是纯粹的二进制数字(如gcc生成的bin文件)。linux本身并不区别对待这两种文件,当我...

2020-04-16 16:57:06 157

原创 linux应用基础知识点3-文件与流、文件描述符

linux应用基础知识点3-文件与流、文件描述符inode和vnode文件与流文件共享lseek函数dup和dup2函数fcntl函数文件描述符文件描述符重定位硬盘最小单元是扇区(如512字节),然后扇区又组成块(如4k),一个扇区中不可存在两个文件。inode和vnode一个硬盘分成两大区域:一个是硬盘内容管理表,另一个是真正存储的内容。操作系统访问硬盘时,先读取硬盘内容管理表,找到扇区级...

2020-04-16 16:33:55 286

原创 linux应用基础知识点2-文件IO和标准IO

linux应用基础知识点2-文件IO和标准IOopen、close、write、read这类API函数构成的一套读写文件的体系,我们称为“文件IO”。应用层C语言库函数提供了一系列读写函数fopen、fclose、fwrite、fread,由文件io封装来的,我们称之为“标准IO”。两者的对比:1.工作效率以write操作为例,文件io会根据硬盘特性,选择合适时间将底层缓冲区文件写入块设备...

2020-04-16 15:45:54 121

原创 linux应用基础知识点1-文件IO

linux应用基础知识点1-文件IO文件的“open、r/w、close”过程文件描述符open函数open之阻塞 非阻塞open之O_SYNCread函数write函数exit _exit _EXIT函数errno和perror文件的“open、r/w、close”过程 文件平时存在块设备中的文件系统中,也就是静态文件。当open它时,系统在进程中建立一个数据结构,用来记录下该文件。然后...

2020-04-16 15:38:00 142

空空如也

空空如也

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

TA关注的人

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