自定义博客皮肤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)
  • 资源 (4)
  • 问答 (8)
  • 收藏
  • 关注

原创 Linux c++ socket编程 客户端 服务器

服务器#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <string.h>#include <stdlib.h>...

2019-12-03 16:56:10 446

原创 线程同步互斥/进程间通信

什么是线程同步和互斥?  同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。这里的同步千万不要理解成那个同时进行,应是指协同、协助、互相配合。线程同步是指多线程通过特定的设置(如互斥量,事件对象,临界区)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的!  线程互斥是指对于共享的进程系统资源,在...

2019-11-14 11:00:57 207

转载 C语言中static全局变量与普通的全局变量区别

1. static全局变量与普通的全局变量有什么区别 ?  全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。  全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。  这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制...

2019-11-11 13:35:51 528

原创 浅谈new/delete和malloc/free的用法与区别

new和malloc的区别a.属性  new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持c。b.参数  使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。c.返回类型  new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行...

2019-11-11 13:28:52 201

转载 信号量与互斥量的区别

信号量:那是多线程同步用的,一个线程完成了某一个动作就通过信号告诉别的线程,别的线程再进行某些动作。互斥量:这是多线程互斥用的,比如说,一个线程占用了某一个资源,那么别的线程就无法访问,知道这个线程离开,其他的线程才开始可以利用这个资源。信号量与普通整型变量的区别:信号量(semaphore)是非负整型变量,除了初始化之外,它只能通过两个标准原子操作:wait(semap), sign...

2019-11-07 18:53:33 4921

转载 Linux系统编程—线程清理

有时候我们希望线程退出时能够自动的执行某些函数,为了能达到此目的,OS 提供了两个函数帮我们完成这个功能:void pthread_cleanup_push(void (*rtn)(void*), void *arg);void pthread_cleanup_pop(int execute);使用方法如果想要你的线程在退出时能够执行清理函数,你需要使用 pthread_clea...

2019-11-07 10:50:55 197

转载 Linux系统编程—共享内存

内核对象内核对象,可以理解为位于内核空间中的某种类型的结构体。一个内核键值必须是我们事先约定好的,通过 get 函数获取内核对象 id 号这种方式我们以前应该见到过类似的,就好像是一对 <key, value> 。这里的 get 函数,通常都是以 get 为后缀的函数名,在共享内存里,对应的这个 get 函数名字为 shmget,其中 shm 的意思是 share memory...

2019-11-06 17:01:17 236

转载 管道、消息队列、共享内存、信号量的特点

在之前我们已经了解过了进程间通信的几种方式:管道、消息队列、共享内存以及信号量。今天我们就来总结一下这几种方式的各自的特点分别是什么,和他们相应的应用场景。也是对于这个知识点的一个复习和巩固。Q1:为什么要有进程间通信??? A1: 1、为了传输数据:一个进程需要将它的数据发送给另外一个进程; 2、为了共享资源:多个进程之间有时需要共享同样的一份资源; 3、为了通知事件...

2019-11-06 14:49:08 421

转载 Linux系统编程—消息队列

1、消息队列简介消息队列本质上是位于内核空间的链表,链表的每个节点都是一条消息。每一条消息都有自己的消息类型,消息类型用整数来表示,而且必须大于 0。每种类型的消息都被对应的链表所维护:图1 位于内核空间的消息队列.png其中数字 1 表示类型为 1 的消息,数字2、3、4 类似。彩色块表示消息数据,它们被挂在对应类型的链表上。值得注意的是,刚刚说过没有消息类型为 ...

2019-11-06 13:37:15 111

原创 sizeof和strlen的区别

1. sizeof是一个操作符,strlen是库函数。2. sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为'\0'的字符串作参数。3. 编译器在编译时就计算出了sizeof的结果。而strlen函数只能在运行时才能计算出来。并且sizeof计算出来的是数据类型占内存的大小,而strlen计算的是字符串的实际长度。4. 数组做sizeof的参数不退化,传递s...

2019-11-05 15:33:03 211

原创 数组指针和指针数组

数组指针(指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。指针数组(数组)定义 intp[n];[]优先级高,先与p结合成为一个数组,再由int说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1是错误的,这样赋值也是错误的...

2019-11-05 15:32:04 72

原创 什么函数不能声明为虚函数

静态成员函数不能是虚函数 内联函数不能是虚函数 构造函数不能是虚函数

2019-11-05 15:16:17 96

转载 静态链接和动态链接的区别和优缺点

静态连接和动态链接的区别静态链接和动态链接两者最大的区别就在于链接的时机不一样,静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时,下面来详细介绍这两种链接方式。静态链接的优缺点静态链接的缺点很明显,一是浪费空间,因为每个可执行程序中对所有需要的目标文件都要有一份副本,所以如果多个程序对同一个目标文件都有依赖,如多个程序中都调用了printf()函数,则这多个程序中都含有p...

2019-11-05 14:44:10 4798

转载 预编译、编译、汇编、链接

C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。过程图解如下:编...

2019-11-05 14:36:54 232

转载 C++ const修饰函数、函数参数、函数返回值

const修饰函数在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。为什么不能调用非const函数?因为非const函数可能修改数据成员,const成员函数是不能修改数据成员的,所以在const成员函数内只能调用const函数。#include <iostream>using namespace std; class A{...

2019-11-05 14:18:56 100

原创 指针和引用的区别

首先,引用不可以为空,但指针可以为空。 其次,引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象。 再次,引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节。 最后,引用比指针更安全。...

2019-11-05 14:04:46 142

原创 构造函数为什么不可以是虚函数

虚表指针是由构造函数初始化的,如果构造函数是虚函数,就没有虚指针去指向虚表来获取构造函数的地址。这就成了一个先有鸡先有蛋的问题。

2019-11-05 11:34:11 151

转载 C++多态(静多态和动多态)

如今的C++已经是个多重泛型编程语言(multiparadigm programming lauguage),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(metaprogramming)的语言。 这些能力和弹性使C++成为一个无可匹敌的工具,但也可能引发使用者的某些迷惑,比如...

2019-11-05 10:58:03 167

原创 C++中默认构造函数和构造函数初始化列表

默认构造函数和构造函数(1) 构造函数:C++用于构建类的新对象时需要调用的函数,该函数无返回类型!(注意:是“无”! 不是空!(void))。(2) 默认构造函数:默认构造函数是在调用时不需要显示地传入实参的构造函数。一个类如果自己没有定义构造函数,则会有一个无参且函数体也是空的默认构造函数。只要程序员定义了构造函数,编译器就不会再提供默认构造函数了。定义默认构造函数有两种方式,一是定义...

2019-11-05 09:36:24 1264

转载 Linux进程间通信(五):信号量 semget()、semop()、semctl()

这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信 -- 信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区...

2019-11-04 17:03:31 376

原创 IPC操作时IPC_CREAT和IPC_EXCL选项的说明

IPC(包括消息队列,共享内存,信号量)的xxxget()创建操作时,可以指定IPC_CREAT和IPC_EXCL选项。以共享内存为例:当只有IPC_CREAT选项打开时,不管是否已存在该块共享内存,则都返回该共享内存的ID,若不存在则创建共享内存当只有IPC_EXCL选项打开时,不管有没有该快共享内存,shmget()都返回-1所以当IPC_CREAT | IPC_EXCL时, 如果没有...

2019-11-04 16:00:23 2584 1

转载 Linux进程间通信(一)之无名管道(PIPE)和有名管道(FIFO)

何为进程间通信进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。简单说就是进程之间可以相互发送数据。 IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。Socket用在网络编程中。管道管道通常指无名管道,是 ...

2019-11-04 13:47:44 254

原创 管道通信的特点及有名管道和无名管道的区别

管道通信的特点1.管道通信是单向的,有固定的读端和写端。2.数据被进程从管道读出后,在管道中该数据就不存在了3.当进程去读取空管道的时候,进程会阻塞;4.当管道往满管道写数据时,进程会阻塞;5.管道的容量是64KB(#define PIPE_BUFFERS 16 include/linux/pipe_fs_i.h)区别:无名管道是无名的,有名管道是有名的; 无名管道只能用于...

2019-11-04 13:12:15 1668

转载 Linux进程间通信——pipe应用实例

    管道(pipe):管道可用于具有亲缘关系的进程间的通信,是一种半双工的方式,数据只能单向流动,允许一个进程和另一个与它有共同祖先的进程之间进行通信。PIPE模块程序一下面模块代码是在主函数中创将一个进程,在子进程中往管道中写数据,在父进程中读取数据,也就是一对一的读写操作。/*=====================================...

2019-11-01 10:06:23 715

原创 Linux进程间的通信方式和原理

进程通信的方式管道( pipe ):管道包括三种:普通管道PIPE: 通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用. 流管道s_pipe: 去除了第一种限制,为半双工,只能在父子或兄弟进程间使用,可以双向传输. 命名管道:name_pipe:去除了第二种限制,可以在许多并不相关的进程之间进行通讯.信号量( semophore ) :信号量是一个计数...

2019-10-31 19:47:29 178

原创 最小生成树 Prim算法 Kruskal算法

Prim算法:Kruskal算法图例 说明 不可选 可选 已选(Vnew) 此为原始的加权连通图。每条边一側的数字代表其权值。 - - - 顶点D被随意选为起始点。顶点A、B、E和F通过单条边与D相连。A是距离D近期的顶点。因此将A及对应边AD以高亮表示。 C, G A, ...

2019-10-31 15:21:29 110

原创 弗洛伊德(floyd)算法核心代码

for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j];Floyd优缺点分析优点:容易理解,可以算出任意两个节点之间的最短距离,代码编...

2019-10-31 14:38:01 564

原创 Linux socket编程 TCP&UDP 客户端&服务器

TCP server:#include <iostream>#include <cstring>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <stdlib...

2019-10-31 13:47:27 145

原创 C++ 自由存储区是否等价于堆?

转载自**melonstreet **:听风过境的专栏阅读目录“free store” VS “heap”问题的来源结论正文“free store” VS “heap”当我问你C++的内存布局时,你大概会回答:“在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区”。如果我接着问你自由存储区与堆有什么区别,你或许这样回答:“malloc...

2019-10-31 13:16:19 102

原创 ARM交叉编译工具链

为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由...

2019-10-31 13:15:16 474

原创 c# 登录 防止sql注入 mysql数据库

写了个c#登录小程序,想要防止sql注入,但是网上都是sqlserver的,图1,自己对照着写了mysql版的,图2,亲测可用

2017-08-30 19:42:32 3412

原创 “HINSTANCE ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT)”

执行代码#include#includeint main() { HINSTANCE hres = ShellExecute(NULL, "open", "notepad", "D:\\ForCoding\\virustest1\\virustest1\\1.txt", "",SW_SHOW); UINT u = (UINT)hres; if (u < 33) { pri

2016-01-05 22:09:17 1372

原创 Lempel-Ziv算法 具体过程

信息论与编码 Lempel-Ziv算法具体过程

2015-11-10 16:29:26 5597 1

拼写纠错 拼写检查 c++

使用c++实现英文拼写检查,对照自定义字典进行检查。 使用c++实现英文拼写检查,对照自定义字典进行检查。 使用c++实现英文拼写检查,对照自定义字典进行检查。

2017-09-23

操作系统课后答案

操作系统课后答案 很全解释很详细 机械工业出版社的

2013-05-22

数据结构与算法分析c++答案

数据结构与算法分析的课后答案 有较高参考价值

2012-09-23

c++的一个实现文本编辑器

用c++实现的文本编辑器,是在控制台下运行的,对于相关数据结构的学习有较大的价值

2012-09-23

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

TA关注的人

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