自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 资源 (1)
  • 收藏
  • 关注

原创 【TCP/IP】(二)、TCP/IP基础知识

1.TCP/IP的具体含义   很多情况下,它是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属于TCP/IP的协议。因此,有时也称TCP/IP为网际协议族。2.TCP/IP协议分层模型 a).硬件(物理层)   TCP/IP的最底层是负责数据传输的硬件。这种硬件就相当于以太网或电话线路等物理层的设备。    b

2017-06-03 16:58:12 969

原创 【TCP/IP】(一)、网络基础知识

1.OSI参考模型   现实中的分组通信协议相当复杂。OSI参考模型将这样一个复杂的协议整理并分为了易于理解的7个分层。 2.各个分层的作用 a).应用层   为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录等协议。    b).表示层   将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式

2017-06-03 16:13:08 754

原创 记录一次使用_RecordsetPtr去访问已有表的新增字段时,出现的怪异问题!

1.问题描述 最近做的一个东西需要存盘,出于一些原因,打算将存盘的数据放在一张已经存在的表中,这样只需要在这张表里新增一列即可。可是当我初次去读取该表的这个新增字段时,程序一直在报错,而代码的写法和以前一模一样,根本看不出出现问题的原因。2.初始状态 在我给表新增加字段时,使用了类似如下的SQL语句:ALTER TABLE [CSL_TABLE_A] add [NewData] [varchar

2017-05-22 17:14:10 1886

原创 如何编译安装Lua5.3,实现调用C共享库

1.简介 最近学习lua时,想编写一个C的共享库,然后在lua中去调用相关函数,于是我在CLion中创建了一个C共享库的工程,代码如下:library.h#ifndef LUA_1_LIBRARY_H#define LUA_1_LIBRARY_H#include <stdio.h>#include "lua.h"#include "lauxlib.h"#include "lualib.h"

2017-04-16 00:48:08 3948

原创 华为2014年四道笔试算法题

1.说明这四道笔试题是在网上看到的,不确定是否真的是华为的笔试题,只是出于兴趣,草草的做了一下,顺便将代码记于此。2.第一题通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。要求实现函数:void stringFilter(const char *pInputStr

2017-04-06 16:25:58 814

原创 Gogland IDE Run/Debug Configurations 配置说明

1.简介 Gogland 是 JetBrains 公司推出的 Go 语言集成开发环境。Gogland 同样基于 IntelliJ 平台开发,支持 JetBrains 的插件体系。目前正式版尚未发布。官方目前提供试用版下载。 本文对Gogland IDE的使用和配置做一些简介,并介绍如何自行设置Run/Debug Configurations规则,以适应复杂Go项目的构建与运行。2.运行&&配置

2017-01-13 10:55:24 25312 4

原创 Cocos2dx 3.13 “模态对话框”的一种实现方式

1.简介   最近在做个小的示例项目,确定后打算用cocos2dx框架来做UI部分,毕竟它易于使用还跨平台,像我这样几乎完全没有cocos2dx基础的童鞋,也能快速上手。在开发过程中,我想像在桌面应用中那样,弹出一个窗口并给出一些文本提示。无奈好像cocos2dx并没有给出现成可用的东西,只能自己琢磨实现了。考虑过后,打算通过Layer类来构建一个子类,然后在Scene中去显示该Layer,从而模

2016-12-23 14:25:16 2139

原创 如何利用Win32服务进程去创建一个GUI用户进程?

最近遇到一个小问题,我需要在一个服务进程中去启动一个用户GUI进程。按常理来说这很简单,通常情况下调用ShellExecute这个API即可。这种方法在XP的年代似乎是完美的,但由于现在大多已经到了Win7,这个方法似乎已经不好用了。追溯原因要谈到微软给XP以后的操作系统添加了Session隔离机制。网络上有很多介绍Windows Session机制的资料,这里就不再多余讨论,反正这个机制的出现让很

2016-10-09 15:30:54 4444 2

原创 互斥与同步

一、竞争条件 1.什么是竞争条件?   两个或者多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序,称为竞争条件。2.怎样避免竞争条件?   要避免这种错误,关键是找出某种途径来阻止多个进程同时读写共享的数据。换言之,我们需要互斥!即以某种手段确保当一个进程在使用一个共享变量或者文件时,其他进程不能做同样的操作。3.什么叫临界区?   我们把对共享内存进行访问的程序片段称作临界区

2016-09-20 14:15:15 3442 2

原创 Go语言可变参数函数,何时该使用省略号(...)

今天的一个例子中发现,对于在调用可变参数函数时,不是总能使用省略号将一个切片展开,有时候编译器可能会报错,为了清除的说明这个问题,我用几个小例子一步一步说明。1、提出假想的需求 假如想要在一堆数据中找出最小的一个,该怎么做?如果数据的类型为int,那么我可以这么做:func MinimumInt(first int, others ...int) int { min := first

2015-11-02 21:42:32 3375 1

原创 Golang import 包问题相关详解

1 本地包声明包是Go程序的基本单位,所以每个Go程序源代码的开始都是一个包声明:package pkgName这就是包声明,pkgName 告诉编译器,当前文件属于哪个包。一个包可以对应多个*.go源文件,标记它们属于同一包的唯一依据就是这个package声明,也就是说:无论多少个源文件,只要它们开头的package包相同,那么它们就属于同一个包,在编译后就只会生成一个.a文件,并且存放在$GOP

2015-10-22 23:26:45 28029 2

原创 Golang 基本命令及使用

之前写过一篇文章详细记录了Linux Mint 下如何搭建Golang开发环境,如果你想看看,可以点击该链接本篇文章主要记录Go的基本命令和使用,所以,在这之前,你最好先搭建一个Go语言开发环境!    1 Go命令一般格式:go command [arg]其中,command是操作命令,arg是该命令的参数    2 常用命令Go的常用命令有:get、run、build、fmt、ins

2015-10-22 18:05:06 3280

原创 Linux Mint 17 搭建Golang开发环境

1 简介  本篇文章旨在记录如何在Mint下搭建一个Golang开发环境,以及笔者在搭建时所遇到的一些小问题,适合新手做入门参考!    2 准备工作下载所需文件   Golang 的官方网站目前无法正常访问,原因嘛大家懂的!所以给出一个国内的镜像站点:Golang中国   请自行根据系统版本选择对应的安装包,笔者这里以go1.4.2版本为例,并且操作系统为:Linux amd64,所以选

2015-10-22 16:48:58 3261

原创 记一道关于链表的面试题

这几天一直在参加校园面试,各大公司都有自己的笔试题,一直以来都觉得链表题都比较简单,但有时候头脑发热,在紧张的笔试中再简单的算法题也有可能写不出来,近三天参加的笔试中,下面的链表题出现了三次,可见链表还是很重要的!  题目:已知一链表结点定义为:typedef struct node Node;struct node{ int data; Node *next;};(1) 现已知链表头

2015-10-16 22:34:55 740

原创 Linux Mint Qt5 开发环境搭建

这篇文章原本是我的老师要求写的,他老人家要求要百分之百详细,所以步骤都写的非常详细,适合新手参考!    1、下载 Qt5 离线安装包下载地址:http://www.qt.io/download-open-source/ 进入后,请注意页面最下方有个【View All Downloads】链接,点击它可找到离线安装包! 根据自己的操作系统版本,选择对应的安装包:     2、添加执行权

2015-10-04 14:14:26 7999 6

原创 VLC for Linux 无法播放FLV视频

本篇文章记录Linux Mint 17.2下 VLC 播放器无法播放FLV格式视频的解决办法!最近重新安装了Linux Mint,在更新系统时发现有两个包无法被更新,估计是依赖问题,运行命令的输出如下:sudo apt-get upgrade然后我尝试搜索了这两个包,想看看更新的版本是什么;又执行命令:sudo apt-cache search libavcodec54结果:更新的包名查到了,手动安

2015-09-19 18:00:30 2997

原创 Sublime Text 3 中文输入 快速解决方案

Sublime Text 3 安装完成后,默认情况下fcitx是不能输入中文的,这里记录一个快速修复方法:具体操作看这个开源项目:https://github.com/lyfeyaj/sublime-text-imfix

2015-09-17 18:50:14 1593

原创 【网络】(十二)UDP简介

1、UDP特点无连接;UDP不维护端到端的连接状态基于消息的数据传输服务;不存在粘包问题,可认为数据包之间是有边界的不可靠;数据包可能丢失、重复、乱序,它缺乏流量控制一般情况下UDP更加高效;2、UDP编程模型3、echo服务器和客户端的UDP实现服务端代码#include <stdio.h>#include <stdlib.h>#include <errno.h>#include

2015-09-16 11:38:17 753

原创 【网络】(十一)更高效的epoll

第十篇文章中将select函数换做了poll,解决了客户端最大并发数量限制的问题,

2015-09-15 19:58:00 858

原创 【网络】(十)select的限制与解决方法poll

在前面的《第七篇》和《第八篇》文章中已经使用select函数对服务器和客户端进行了重写,但这有个问题存在,如果有非常多的客户端需要连接到服务器,那很可能连接到1020个客户端时,服务端就会报错了,原因在于用select实现的并发服务器能够达到的并发数,受两方面限制一个进程能打开的最大文件描述符限制,这可通过调整内核参数修改!select中的fd_set集合容量的限制(FD_SETSIZE),它不

2015-09-15 16:07:39 1055

原创 【网络】(九)close与shutdown

1、两者的区别close函数会终止数据传送的两个方向,包括套接口的读取和写入;shutdown函数可以有选择的终止某个方向的数据传送,或者终止两个方向;shutdown函数的how参数如果为SHUT_RDWR,表示关闭了套接口的写端,可以保证此时对方会收到一个FIN段,并导致对方read函数读取到EOF并返回0,shutdown函数关闭写端时总会这么做, 它不理会套接字引用计数;而close

2015-09-14 16:40:40 672

原创 【网络】(八)I/O复用--Select(二)

第七篇文章中简介了几种IO模型,也使用select函数改进客户端的代码,本篇文章用它来改进一下服务端代码!用select函数实现的服务器程序,叫做并发服务器,它还是在排队处理任务,无法并行处理这些事件!1、select事件发生条件0.1 可读事件套接口缓冲区有数据可读;连接的读一半关闭,即接收到FIN段时,可读,并且读操作会返回0如果是监听套接口,已完成队列不为空时,可读;即有新的连接请求套

2015-09-14 11:01:31 741

原创 【网络】(七)五种I/O模型--I/O复用 Select(一)

1、五种I/O模型五种I/O模型分别是:阻塞I/O非阻塞I/OI/O复用(select/poll)信号驱动I/O异步I/O0.1 阻塞I/O连接完成,我们通常使用recv函数读取数据,如果此时没有数据,那么该函数阻塞,直到对方发送的数据到达套接口缓冲区,此时该函数将数据复制到用户缓冲区中,并返回!0.2 非阻塞I/O连接完成,调用recv函数,并将套接口设置为非阻塞模式(fcntl(sk

2015-09-13 20:33:54 907

原创 【网络】(六)TCP的十一种状态

1、TCP 十种状态过程描述:0.1 服务器B和客户端A中的套接字都处于CLOSE状态(图中未标出)0.2 服务器B调用socket/bind/listen函数创建了一个套接字后,处于LISTEN状态,该套接字属于被动套接字,被动套接字不能用来发起连接,只能接受连接0.3 客户端A调用socket/connect函数创建一个套接字后,处于SYN_SENT状态,该套接字属于主动套接字,用来发起连

2015-09-13 17:32:12 3646

原创 【网络】(五)避免僵尸进程

前面的四篇文章中,对于僵尸进程都只做了简单的处理,我忽略了子进程退出时发送给父进程的SIGCHLD信号,本篇文章来详细谈论一下僵尸进程!1、为什么会有僵尸进程?当父进程fork出的子进程运行结束后,为了父进程还能够获得子进程的一些信息,系统会维护子进程的一些信息,这些信息包括子进程的进程ID、终止状态以及资源利用信息(CPU时间,内存使用量等等)。如果一个进程终止,而该进程有子进程处于僵尸状态,那么

2015-09-13 11:10:55 864

原创 【网络】(四)网络相关函数使用简介

1、getsockname用于获取自己的ip和端口使用举例: struct sockaddr_in localaddr; socklen_t len = sizeof(localaddr); memset(&localaddr,0,sizeof(localaddr)); //获取自己的ip和端口 if(getsockname(sk_fd,(struct socka

2015-09-12 18:06:47 421

原创 【网络】(三)流协议粘包问题

在第二篇中,谈到了流协议的粘包问题以及一种解决方法的实现,在数据的开始显示的指明数据的长度;这是一种不错的解决方法,另外,也有说到可以根据数据中的特殊字符来判断是否接收完了一整条消息,本篇将在上一篇的基础上实现这一方法!原理:依据数据尾部是否有’\n’,来表示消息是否接收完成1、核心函数实现//使用recv函数从套接字接收缓冲区中接收数据,但并不从缓冲去中清除数据ssize_t recv_peek

2015-09-12 16:55:27 742

原创 【网络】(二)流协议粘包问题

1、流协议与粘包  TCP协议是基于字节流的,数据无边界,无边界反应在对方接收消息时无法保证一次性返回多少个字节,有可能收到的不是一个完整的消息,可能是半个消息、或者多于一个消息,这就是TCP的粘包问题  UDP协议基于数据报,数据有边界,体现在对方一次收到的是一个完整的消息产生粘包的因素  如上图所示,应用层首先用write函数将要发送的数据拷贝到套接字发送缓冲区中,该缓冲区的大小由SO_SNDB

2015-09-12 15:35:24 800

原创 【网络】(一)Socket 简介

1、什么是socket? socket可以看成是用户进程与内核网络协议栈的编程接口。 socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信!     2、IPv4套接字地址结构 通常也被称为“网际套接字地址结构”,名为:sockaddr_in,位于头文件struct sockaddr_in{ uint8_t sin_len; //整个结构体长度

2015-09-12 09:54:02 720

原创 获取进程能打开的最大文件数量【OPEN_MAX】

手上一个小项目,需要获取一个当前Linux操作系统下,一个进程能打开的最大文件数目,在《linux程序设计 第4版》 85页有说:  任何一个运行中的程序能够同时打开的文件数是有限制的,这个限制通常是由limits.h头文件中的常量OPEN_MAX定义的,它的值随系统的不同而不同,但POSIX要求它至少为16!  但我尝试使用该宏时,却已经找不到该宏的定义了,查了一下资料,才知道2.6.24以后的内

2015-09-09 11:09:12 7741 4

原创 【二十】一个面试题

面试题: 写函数判断一个变量是否为指针?要解决这个问题,要用一个巧妙的方法,先回顾一下相关知识点:C++中仍然支持C语言中的可变参数函数C++编译器的函数匹配调用优先级 重载函数函数模板可变参数函数Tip: 如果同时存在普通函数和其重载版本、模板函数、可变参数函数,编译器会优先调用普通函数和其重载版本,然后依次时模板函数和可变参数函数!示例:#include <cstdlib>#i

2015-08-28 10:44:16 640

原创 【十九】一些实际工程中的问题

1、Bug在实际工程中内存操作是bug的重要来源C++将堆内存交由开发人员自由使用,因此 未及时释放,将产生内存泄漏重复释放同一段内存,行为未知使用越界,操作了不属于自己的内存思考: 怎样最大限度的避开上述的使用问题?2、数组类 内存越界的问题常发生于数组的使用中 解决方案:数组类工程中,在非特殊情况下,要求开发者使用预先编写的数组类对象代替C++语言中的原生数组,而其实C++中也

2015-08-27 12:17:49 680

原创 【十八】类模板(下)

本篇接着上一篇的内容介绍!1、类模板多个类型参数和函数模板一样,一个类模板也可以定义多个类型参数! 如下:#include <iostream>using namespace std;template <typename T1, typename T2>class Test{public: void test(T1 a, T2 b) { cout << static_cas

2015-08-26 16:42:12 587

原创 【十七】类模板(上)

1、引入类模板C++中可以将模板的思想应用于类,使得类可以不关注具体操作的数据类型,而只关注类所需要实现的功能。C++中的类模板提供一种特殊的类以相同的行为处理不同的类型在类声明前使用template进行标识< typename T> 用于说明类中使用的泛指类型 T在模板类外部定义成员函数的实现时,需要加上template < typename T>的声明,并且类作用域为:classname

2015-08-26 11:17:23 534

原创 【十六】函数模板

1、引入泛型编程在以前C语言中,如果一个函数要处理不同的数据类型,那么需要为每种数据类型都定义一个函数实行,例如下面的函数:void Swap(int& a, int& b){ int temp = a; a = b; b = temp;}void Swap(char& a, char& b){ char temp = a; a = b; b = temp;}void

2015-08-25 17:08:38 484

原创 【十五】继承与多态(下)

1、重载和重写思考:重载和重写有什么区别?什么时候是重载,什么时候是重写?函数重载 必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被覆盖重载是在编译期间根据参数类型和个数决定调用函数函数重写 必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型使用virtual声明之后能够产生多态多态是在运行期间根据具体对象的类型决定调用函数举例: 假如有如下两个类:

2015-08-24 17:14:46 611

原创 【十四】继承与多态(上)

1、函数重写上一篇文章中说到,当子类定义一个与父类同名的成员变量时,父类的该成员变量依然会被继承到子类,它们两者可通过作用域限定符来区分,那么,如果子类中定义了和父类相同类型且同名的函数又会怎样呢?这就是函数重写!在子类中定义与父类中原型相同的函数函数重写只发生在父类与子类之间#include <cstdlib>#include <iostream>using namespace std;c

2015-08-24 15:11:46 608

原创 【十三】继承中的构造与析构

1、赋值兼容性原则子类对象可以当作父类对象使用子类对象可以直接赋值给父类对象子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象所以,在上一篇文章中说: 子类是就是特殊的父类!!!2、继承对象模型类在C++编译器的内部可以理解为结构体 子类是由父类成员叠加子类新成员得到的3、继承和构造与析构思考:   一个从父类继承来的子类在构造时,如何初始化

2015-08-24 11:56:42 753

原创 【十二】初探继承

1、继承概念面向对象中的继承指类之间的父子关系子类拥有父类的所有成员变量和成员函数子类就是一种特殊的父类子类对象可以当作父类对象使用子类可以拥有父类没有的方法和属性示例:class Parent{private: int a;public: Parent() { a = 100; } void print() { cout << "a = "

2015-08-24 10:15:25 540

原创 【十】类的静态成员

1、类的静态成员在C++中可以定义静态成员变量和静态成员函数静态成员属于整个类所有,不需要依赖任何对象,会在全局数据区分配空间静态成员可以是public、private和protected的可以在类外,通过类名或者对象名直接访问public静态成员不可以在类外,访问private或protected静态成员类的成员函数不用通过作用域运算符,就可以直接访问静态成员变量    2、静态

2015-08-23 16:36:59 645

VISUAL_C++实践与提高:串口通信与工程应用篇

VISUAL_C++实践与提高:串口通信与工程应用篇,本压缩包内包含完整版的PDF与本书配套光盘!资源来源于网络!

2014-12-11

空空如也

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

TA关注的人

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