- 博客(74)
- 资源 (1)
- 收藏
- 关注
原创 Linux下串口編程遇到的接收数据错误及原因(
VTIME定义要求等待的时间(百毫米,通常是unsigned char变量),而VMIN定义了要求等待的最小字节数(相比之下,read函数的第三个参数指定了要求读的最大字节数)。有时候,在用write发送数据时没有键入回车,信息就发送不出去,这主要是因为我们在输入输出时是按照规范模式接收到回车或换行才发送,而更多情况下我们是不必键入回车或换行的。如果VTIME=时间量,VMIN=要求等待读取的最小字节数,那么将从read读取第一个字节的数据时开始计时,并会在读取到VMIN个字节或者VTIME时间后返回。
2024-01-25 21:49:00 945
原创 c++高阶话题
我们已经知道C++中的标准输入输出流,cout和cin现在我们来学习文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它定义了三个新的数据类型:数据类型描述ofstream该数据类型表示输出文件流,用于创建文件并向文件写入信息。(输出流对应写操作)ifstream该数据类型表示输入文件流,用于从文件读取信息。(输入流对应读操作)fstream该数据类型通常表示文件流,...
2018-02-08 11:26:09 303
原创 GRPC的四种服务类型
上次简单介绍了grpc的使用方法,并创建了一个方法调用,在grpc中有四种服务类型,下面分别进行介绍简单rpc这就是一般的rpc调用,一个请求对象对应一个返回对象proto语法:rpc simpleHello(Person) returns (Result) {}service代码@Overridepublic void simpleHello(ProtoObj.Pe
2018-02-05 23:47:01 5344
原创 linux C++下捕获崩溃日志
#include #include #include #include #include #include #include const int MAX_STACK_FRAMES = 128;void sig_crash(int sig){ FILE* fd; struct stat buf; stat("./crash.log",
2018-02-05 12:09:02 2295
原创 JSON与Protocol Buffers
JSON与Protocol Buffers同为序列化数据的存储格式。 性能比较,视平台、语言、数据结构复杂程度的不同,Protocol Buffers与JSON相比,性能可能会从慢15倍到快5倍。值得指出的是,在Android系统中,Protocol Buffers反序列化数据会比JSON快大约3倍[1]。 JSON数据格式有一个缺点:冗余太大,如:
2018-02-05 12:06:52 638
原创 IO多路复用之epoll总结
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:
2018-02-04 18:57:23 128
原创 IO多路复用之poll总结
1、基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。2、poll函数 函数
2018-02-04 18:56:19 180
原创 IO多路复用之select总结
1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。
2018-02-04 18:54:54 169
原创 select、poll、epoll之间的区别总结
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用
2018-02-04 18:53:01 154
原创 Go语言中查询SqlServer数据库
一、Go语言中查询MsSQL数据库: // main.gopackage mainimport ( "database/sql" "fmt" "log" "time" _ "github.com/denisenkom/go-mssqldb")func main() { var isdebug = true
2017-12-08 10:35:47 3167
原创 微信支付的服务器端
微信支付服务端开发总结前言最近应公司业务需求,把微信支付完成了,当然已经顺利上线。但是开发的过程是也是踩了很多坑,下面我就先说说开发流程,以及在开发中遇到的大大小小的坑。开发流程首先,看一下微信开方平台关于支付的一个时序图,如下:微信支付时序图https://pay.weixin.qq.com/wiki/doc/api/a
2017-11-30 11:24:29 1783 1
原创 支付宝的服务器端的开发流程
支付宝支付的服务端接入流程0、写在前面的话支付宝支付官网上服务端没有提供C++语言的SDK,所以如果要用C++接入的话要自己实现签名验证,醉了,当然是用Java了。。。官网上的流程不清不楚的,所以自己整理了一下。1、RSA密钥应用公钥:商户自己生成的RSA公钥,需要上传到支付宝平台,以便支付宝验证交易是否由商户发起的应用私钥:商户自己生成的R
2017-11-30 10:45:47 1079
原创 C和C++之间库的互相调用
C和C++之间库的互相调用昨晚有个朋友问我关于在C中调用C++库的问题,今天午饭后,由于脖子痛的厉害而没有加入到我们组的“每天一战”的行列中去,所以正好将C和C++之间的库调用关系做个总结。1.extern "C"的理解:很多人认为"C"表示的C语言,实际并非如此,"C"表示的是一种链接约定,只是因C和C++语言之间的密切关系而在它们之间更多的应用而已。实际上Fortran和汇编语
2016-12-16 17:17:58 516 1
原创 用Node.js创建自签名的HTTPS服务器
用Node.js创建自签名的HTTPS服务器创建自己的CA机构创建服务器端证书创建客户端证书将证书打包创建自己的CA机构为CA生成私钥openssl genrsa -out ca-key.pem -des 1024通过CA私钥生成CSRopenssl req -new -key ca-key.pem -out ca-csr.pem
2016-10-20 16:54:34 822
原创 CentOS 配置防火墙操作实例(启、停、开、闭端口)
CentOS 配置防火墙操作实例(启、停、开、闭端口): 注:防火墙的基本操作命令:查询防火墙状态:[root@localhost ~]# service iptables status 停止防火墙:[root@localhost ~]# service iptables stop 启动防火墙:[root@localhost ~]# service
2016-10-19 10:22:47 307
原创 https握手时交互的内容
1、HTTPS本身并非协议,而是标准的HTTP协议架在SSL/TLS协议之上的一种结构。(一种不太合适的说法可以认为是两种协议的叠加)。HTTP是工作在OSI7层模型的最上层,就是第7层:Application Layer。而SSL/TLS是工作在第4层:Transport Layer。两层之间还是隔了Presentation Layer(6层)和Session Layer(5层)两层的。
2016-10-18 17:43:40 344
原创 https的原理
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。HTTPS简介HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。1
2016-10-18 17:42:06 232
转载 C++文件读写详解(ofstream,ifstream,fstream)
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:[java] view plain copy print?#include ofstream //文
2016-08-04 10:43:04 224
原创 Jenkins的使用---项目构建,邮件通知
之前我们说的都是手动的构建一个项目,我们是不是可以自动的来构建项目那么此时我们需要使用Poll SCM和Build periodically,我们在构建触发中选择这两项即可,其实他们两个就是一个自动任务,这里的语法也是cron的语法,没有什么特别触发远程构建:触发远程构建Build after other projects are built:在其他项目触发的时候触发,里面有分为三种情
2016-06-29 17:46:49 1181
原创 Jenkins的使用---代码检查,项目部署
首先我这里要简单的对sonar有个介绍Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测,看到这里我们是不是觉得soanr很强大呢,那么我们下来将sonar集成到Jenkins。sonar的安装
2016-06-29 17:45:23 2890
原创 Jenkins的使用---安装,新建项目
Jenkins,之前叫做Hudson,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,包括:1、持续的软件版本发布/测试项目。2、监控外部调用执行的工作Jenkins win下安装1.下载Jenkins http://mirrors.jenkins-ci.org/war/2.安装jdk、tomcat环境3.将Jenkins.wa
2016-06-29 17:41:27 458
原创 BOOST库 条件变量--多线程通信机制
1相关理念(1)类名条件变量和互斥变量都是boost库中被封装的类。 (2)条件变量条件变量是thread库提供的一种等待线程同步的机制,可实现线程间的通信,它必须与互斥量配合使用,等待另一个线程中某个事件发生后本线程才能继续执行。 (3)互斥变量互斥量是一种用于多线程编程的手段,它可以在多线程编程中防止多个线程同时操作共享资源[
2016-06-16 15:56:33 401
原创 boost::condition_variable 设计生产者消费者队列
boost::condition_variable 用法:当线程间的共享数据发生变化的时候,可以通过condition_variable来通知其他的线程。消费者wait 直到生产者通知其状态发生改变,Condition_variable是使用方法如下:·当持有锁之后,线程调用wait·wait解开持有的互斥锁(mutex),阻塞本线程,并将自己加入到唤醒队列中·当收
2016-06-16 15:54:52 798
原创 boost线程间通信和传递参数
当需要线程等待某个事物时,可以创建一个condition对象,然后通过这个对象来通知那些等待的线程。#include #include #include #include #include #include class Request { /*...*/ }; // A simple job queue class; don't do this, use
2016-06-15 16:08:12 3718
原创 模板类高效线程安全的实现Queue
保证同一时刻多个线程不会同时修改同一个共享资源,那么这个程序是线程安全的,或者是串行化访问资源的。可以使用mutex类来控制线程的并发问题。123456789101112131415161718192021
2016-06-15 14:50:24 981
原创 linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
PATH: 可执行程序的查找路径查看当前环境变量:echo $PATH设置: 方法一:export PATH=PATH:/XXX 但是登出后就失效方法二:修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile 1. 在其中添加例如export PATH=/opt/ActivePython-2.7/bin:$PATH
2016-06-14 17:50:12 15907
原创 win7 vs2012/2013 编译boost 1.59
boost官网上提供了使用指导,part2:Instllation就说明了如何去编译,地址:http://www.boost.org/boost-build2/doc/html/index.html经过测试,2012和2013步骤相同,这里以2012为例。1、打开VS2012 Native Tools Command,可以从开始--Microsoft Vis
2016-06-14 16:21:53 1392
原创 boost多平台编译方法
1.通用规则多数库是不需要预先编译的,include hpp文件就能用。如果出现链接失败,那就是可能需要编译库了。boost自带一套编译工具bjam,bjam本身是跨平台的,并且也要自行编译出来。在boost目录下有bootstrap.sh和bootstrap.bat两个脚本分别用来编译*nix和windows下的bjam。bootstrap脚本可以传入参数,以在编译bjam过程中
2016-06-14 16:20:25 1101
原创 C++四种强制转换
C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是
2016-06-13 19:54:02 297
原创 使用boost::shared_ptr做为线程的参数
使用linux下的线程创建函数pthread_create已久,在传递给它void*型的入口参数时,总是两种方式:1. 在堆中创建,传入参数指针至线程中,由线程内部释放或等待线程退出后再释放;2. 不在堆中创建或使用全局变量;虽然在各种书上提及这种方式的种种不足,但我一直用得还挺好.主要就是注意资源的释放就成,毕竟这种低层的API能给程序员最大的灵活性,所谓有空间才能发挥嘛.但不可
2016-06-13 19:32:13 1131
原创 Linux下进程崩溃时定位源代码位置
在Linux系统下,进程可能由于各种原因崩溃,此时我们要找到出问题的源代码在某一个文件的具体行号,这样调试起来就会方便,高效很多。下面是解决问题的思路和步骤以及自己的一些想法 解决该问题的大体思路是这样的:在Linux下,进程崩溃时内核(也就是我们所谓的操作系统)会向进程发送信号,比如我们程序运行崩溃时经常会看到segmentation falt这样的信息,这是进程非法操作内
2016-06-03 14:01:52 4783
原创 linux系统c线程池的实现
1.线程池基本原理 在传统服务器结构中, 常是 有一个总的 监听线程监听有没有新的用户连接服务器, 每当有一个新的 用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后, 服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。而且在大量用户的情况下, 系统为了开辟和销毁线程将浪费大量的时间和资源。线程
2016-06-03 10:43:26 198
原创 linux系统c++线程池的实现
1.线程池基本原理 在传统服务器结构中, 常是 有一个总的 监听线程监听有没有新的用户连接服务器, 每当有一个新的 用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后, 服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。而且在大量用户的情况下, 系统为了开辟和销毁线程将浪费大量的时间和资源。线程
2016-06-03 10:25:42 337
原创 使用 SCons
使用 SCons在 SCons 安装完成后,我们就可以使用 SCons 来建造我们的程序或者项目了。像很多编程书籍那样,在这里我们也通过一个简单的 helloscons 例子来说明如何使用 SCons。例子 helloscons 包含两个文件 :$ ls hellosconshelloscons.c SConstruct其中 helloscons.c 是程序的源文件,SCon
2016-05-26 18:33:03 588
原创 SCons 简介与安装
在软件项目开发过程中,make 工具通常被用来建造程序。然而,编写make工具的配置文件Makefile本身却不是一件容易的事情。SCons 是一个用 Python 语言编写的类似于 make 工具的程序。与 make 工具相比较,SCons 的配置文件更加简单清晰明了。本文将简单介绍如何在软件开发项目中使用 SCons,通过本文,读者可以学习到如何使用 SCons 来建造自己的程序项目。
2016-05-26 18:32:14 702
原创 Linux进程学习---exec()函数的学习
当我们看恐怖片时,经常会有这样的场景:当一个人被鬼上身后,这个人的身体表面上还和以前一样,但是他的灵魂和思想已经被这个鬼占有了,因此它会控制这个人做他自己想做的事情--那么在进程中也有这样的情景。那么是如何实现的呢?现在我们来学习exec()函数族 一.exec()函数 族 1. 首先我们在终端输入命令:man exec 可以看到函数的原型: #include
2016-05-26 17:28:57 332
原创 Linux进程学习---wait()和waitpid()函数
上一节最后我们说到若子进程先于父进程结束时,父进程调用wait()函数和不调用wait()函数会产生两种不同的结果:--如果父进程没有调用wait()和waitpid()函数,子进程就会进入僵死状态。--如果父进程调用了wait()和waitpid()函数,就不会使子进程变为僵尸进程。这是为什么呢?现在我们来深入学习wait()函数和waitpid()函数。一.wa
2016-05-26 17:27:48 365
原创 Linux进程学习---exit()和_exit()函数
进程就好比人一样有其生命,我们通过fork()函数来创建一个进程,那么我们又是如何来中止进程呢。 进程退出 1.在Linux中任何让一个进程退出 进程退出表示进程即将结束。在Linux中进程退出分为了正常退出和异常退出两种。 1>正常退出 a. 在main()函数中执行return 。 b.调用exit()函数 c.调用_exit()函数
2016-05-26 17:26:05 229
原创 Linux进程学习---孤儿进程和守护进程
通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程。现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程 如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程。 2.那么如何让一个进程变为一个孤儿进程呢? 我们可以先创建一个进程,然后杀
2016-05-26 17:24:58 485
原创 Linux进程学习---fork()和vfork()
通过 上一部分的学习,我们了解了进程的概念以及在Linux中进程的实现,此部分我们将具体学习如何在Linux中创建一个进程。 一前言: 通过原理知识的学习,我们知道每个进程由进程ID号标识。进程被创建时系统会为其分配一个唯一的进程ID号。当一个进程向其父进程(创建该进程的进程)传递其终止消息时,意味这个进程的整个生命周期结束。此时,该进程占用的所用资源包括进程ID被全部释放。
2016-05-26 17:23:40 276
详细深入VC编程内幕
2009-09-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人