软件其他知识
文章平均质量分 69
yansmile1
这个作者很懒,什么都没留下…
展开
-
Makefile 使用总结
1. Makefile 简介Makefile 是和 make 命令一起配合使用的.很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂.Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些日常操作. 这个需要大家发挥自己的想象力.转载 2017-05-09 16:43:44 · 507 阅读 · 0 评论 -
我的Protobuf消息设计原则
网络通信涉及到消息的定义,不管是使用二进制模式、xml、json等格式。消息都可以大体的分为 命令消息、请求消息、应答消息和指示消息4大消息类型。一般情况下每个消息还还有包含一个序列号和一个能够唯一区分类型类型的消息编号,编号可以使用字符串、整数或者枚举等。1. 使用 protobuf 的enum定于消息的编号,也就是消息的类型。我会为每个系统都定义一个MSG枚举。包含系统用到的所有消转载 2017-02-27 17:21:12 · 1093 阅读 · 0 评论 -
google protobuf序列化原理
一个message,序列化时首先就算这个message所有filed序列化需要占用的字节长度,计算这个长度是非常简单的,因为protobuf中每种类型的filed所占用的字节数是已知的(bytes、string除外),只需要累加即可。这个长度就是serializedSize,32为integer,在protobuf的某些序列化方式中可能使用varint32(一个压缩的、根据数字区间,使用不同字节长转载 2017-02-27 17:20:34 · 12705 阅读 · 1 评论 -
Lua和C++交互
转自:http://cn.cocos2d-x.org/tutorial/show?id=1474一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-转载 2017-02-15 17:04:52 · 247 阅读 · 0 评论 -
TCP网络编程中connect()、listen()跟accept()三者之间的关系
TCP网络编程中connect()、listen()和accept()三者之间的关系基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下:connect()函数对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知转载 2017-02-21 15:03:17 · 316 阅读 · 0 评论 -
socket原理详解
1、什么是socket我们知道进程通信的方法有管道、命名管道、信号、消息队列、共享内存、信号量,这些方法都要求通信的两个进程位于同一个主机。但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机网络中我们就学过了tcp/ip协议族,其实使用tcp/ip协议族就能达到我们想要的效果,如下图(图片来源于《tcp/ip协议详解卷一》第一章1.3) 、转载 2017-02-21 14:57:41 · 351 阅读 · 0 评论 -
使用Protocol Buffers入门四步骤
Protocol Buffers(简称protobuf)是谷歌的一项技术,用于将结构化的数据序列化、反序列化,经常用于网络传输。protobuf是谷歌的Protocol Buffers的简称,用于结构化数据和字节码之间互相转换(序列化、反序列化,即实现从结构体转换为字节流(编码,向LIS发送消息时使用)以及从字节流转换为结构体(解码,从LIS接收消息时使用)的功能。),一般应用于网络传输,可支转载 2017-02-20 12:11:23 · 4629 阅读 · 0 评论 -
Lua 教程
Lua 教程Lua 教程Lua 环境安装Lua 基本语法Lua 数据类型Lua 变量Lua 循环Lua 流程控制Lua 函数Lua 运算符Lua 字符串Lua 数组Lua 迭代器Lua table(表)Lua 模块与包Lua 元表(Metatable)Lua 协同程序(coroutine)Lua 文件 I/OLua转载 2017-02-10 15:01:43 · 1894 阅读 · 1 评论 -
【Boost】boost库中thread多线程详解5——谈谈线程中断
线程不是在任意时刻都可以被中断的。如果将线程中函数中的sleep()睡眠等待去掉,那么即使在主线程中调用interrupt()线程也不会被中断。thread库预定义了若干个线程的中断点,只有当线程执行到中断点的时候才能被中断,一个线程可以拥有任意多个中断点。thread库预定义了共9个中断点,它们都是函数,如下:1. thread::join();2. thread::time转载 2017-02-17 15:52:21 · 512 阅读 · 0 评论 -
select 与 fd_set
select(),确定一个或多个套接口的状态,本函数用于确定一个或多个套接口的状态,对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息,用fd_set结构来表示一组等待检查的套接口,在调用返回时,这个结构存有满足一定条件的套接口组的子集,并且select()返回满足条件的套接口的数目。用途:确定一个或多个套接口的状态,如需要则等待。[cpp转载 2017-02-17 15:36:15 · 412 阅读 · 0 评论 -
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
转载:select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET 从别人的博客中转载过来了这一篇文章,经过重新编辑排版之后展现于此,做一个知识点保存与学习。 select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型:int select(int max转载 2017-02-17 14:56:16 · 289 阅读 · 0 评论 -
lua安装
lua安装:1、推荐安装libreadline的deb文件("sudo dpkg -i *.deb" 安装*.deb软件包(其中-i等价于--install))2、直接安装lua-5.3.3.tar文件(http://www.runoob.com/lua/lua-environment.html): tar zxf lua-5.3.0.tar.gz cd lua-5原创 2017-02-08 17:23:21 · 1264 阅读 · 1 评论 -
Boost::bind使用详解
demo#if 1#include#include#includeusing namespace std;typedef boost::function Func;void (*fun)(int a){;}int test(int num){ std::cout return 2;}int main()转载 2017-02-16 18:27:56 · 6559 阅读 · 1 评论 -
IO中同步、异步与阻塞、非阻塞的区别
一、同步与异步同步/异步, 它们是消息的通知机制1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数转载 2016-12-19 17:18:48 · 221 阅读 · 0 评论 -
memmove 和 memcpy的区别以及处理内存重叠问题
区别:memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:[cpp] view plain copy void *memcpy(void *dst, const void *src, size_t count); void *memmove(void *dst,转载 2016-12-19 10:49:53 · 921 阅读 · 0 评论 -
boost::make_shared
shared_ptr很好地消除了显式的delete调用,如果读者掌握了它的用法,可以肯定delete将会在你的编程字典中彻底消失。但这还不够,因为shared_ptr的构造还需要new调用,这导致了代码中的某种不对称性。虽然shared_ptr很好地包装了new表达式,但过多的显式new操作符也是个问题,它应该使用工厂模式来解决。因此,shared_ptr在头文件 中提供了一个自由工厂函数转载 2017-03-06 16:27:15 · 1870 阅读 · 0 评论 -
boost库中thread多线程详解5——谈谈线程中断
线程不是在任意时刻都可以被中断的。如果将线程中函数中的sleep()睡眠等待去掉,那么即使在主线程中调用interrupt()线程也不会被中断。thread库预定义了若干个线程的中断点,只有当线程执行到中断点的时候才能被中断,一个线程可以拥有任意多个中断点。thread库预定义了共9个中断点,它们都是函数,如下:1. thread::join();2. thread::time转载 2017-03-06 16:28:04 · 1066 阅读 · 1 评论 -
ubuntu下配置TFTP服务器,用以ubuntu下烧写内核到ARM开发板
ubuntu下配置TFTP服务器,用以ubuntu下烧写内核到ARM开发板 在学习练习嵌入式内核的移植的时候,内核可以有通过 1.sd卡烧写;2. usb烧写 ;3. 基于TFTP协议的网线烧写。但是,在开发的时候,最方便的方式还是TFTP配合u-boot烧写内核,因为sd卡在PC机和ARM板之间移来移去不方面,通常sd卡用于一键烧写完整的linux系统到开发板(转载 2017-05-09 11:15:56 · 1167 阅读 · 0 评论 -
如何判断两个IP是否在同一网段
大学的时候有上过计算机网络的课程,IP这块也有一些接触,但向来不是很好学的我,对于一些问题似是而非的态度,感觉知道,但具体的又说不上,今天就花了点时间彻底把这个问题搞清楚,写在这也算是做个记录吧!接下来我们举例说明,如何去判断A和B两个IP是否在同一网段。 A IP:202.194.128.9 B IP:202.194.128.14 子网转载 2017-05-09 11:09:53 · 6639 阅读 · 1 评论 -
Linux gcc链接动态库出错:LIBRARY_PATH和LD_LIBRARY_PATH的区别
原文 http://typecodes.com/cseries/gcclderrlibrarypath.html主题 GCC 动态库 Linux昨天在自己的CentOs7.1上写makefile的时候,发现在一个C程序在编译并链接一个已生成好的lib动态库的时候出错。链接命令大概是这样的:[root@typecodes tcpmsg]# gcc -o hello ma转载 2017-05-16 10:05:35 · 6103 阅读 · 1 评论 -
Window7下安装openssl完整版(亲测实现)
安装环境:操作系统:window7(64位)C++编译器:VS2010---------------------------------------------------------------------------------------------------------------------------------------------------------------转载 2017-04-21 16:17:49 · 967 阅读 · 0 评论 -
thrift安装
# Windows版本编译## boost库的windows版编译与安装(参照http://blog.csdn.net/yansmile1/article/details/70327835) boost使用1.62.0版本,下载地址:https://sourceforge.net/projects/boost/files/boost/1.62.0/boost_1_62_0.zip转载 2017-04-21 16:25:13 · 470 阅读 · 0 评论 -
C++ Boost在Windows和Linux下的编译安装
C++作为历史上最成功的语言之一,除了它具有面向对象的性质之外,还有一个非常重要的创新,那就是泛型编程。泛型的思想其实是为所有问题提供一个解决方案的模版,程序员只需把每次的具体问题放到模版里面,那么就可以获得该问题的解决方案,利用模版做到具体问题具体分析。C++ STL毫无疑问是泛型思想的一个成功案例。在STL中,我们看到各种封装好的数据结构和算法,而不需要程序员再重复制造轮子(何况自己造的轮子还转载 2017-04-21 16:24:32 · 3455 阅读 · 0 评论 -
Makefile经典教程(掌握这些足够)
该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,请移步陈浩大神博客:http://blog.csdn.net/haoel/article/details/2886makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和profes转载 2017-04-20 13:55:47 · 734 阅读 · 0 评论 -
使用Google Test的一个简单例子(接合上一篇看)
0. 引子 本例是从 gtest-1.5.0 自带的 sample 中的 sample1 改写而来,笔者只添加了一个求 n 的阶层的函数,如下。void Factorial(int n, int & result ){ result = 1; for (int i = 1; i result *= i;}目的是想测试像这样转载 2017-04-20 11:57:25 · 894 阅读 · 0 评论 -
Google Test测试框架自带Sample案例注释翻译
有一段时间没写博客了,前些时间闲下来看了下google test(gtest)测试框架自带的sample测试样例,感觉还不错,就对里面的注释进行了相关翻译,在此做个标录,对测试流程、方法和设计的理解会有些帮助,方便日后重新查阅,有兴趣的同志不妨看一下相关说明: 1、项目工程可到附件中下载 2、项目工程在visual studio2005环境下编译运行的转载 2017-04-20 11:54:54 · 2535 阅读 · 0 评论 -
thrift C++做server, C++,python, java做Client例子
一、安装我机器上已经安装好了 thrift-0.9.1二、示例编辑demo.thrift文件,内容如下:struct UserProfile{ 1:i32 id, //注意这里是逗号,而不是分号 2:string name, 3:string blurb} //这里没有分号 servi转载 2017-04-20 10:36:57 · 473 阅读 · 0 评论 -
select 与 fd_set
select(),确定一个或多个套接口的状态,本函数用于确定一个或多个套接口的状态,对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息,用fd_set结构来表示一组等待检查的套接口,在调用返回时,这个结构存有满足一定条件的套接口组的子集,并且select()返回满足条件的套接口的数目。用途:确定一个或多个套接口的状态,如需要则等待。[cpp转载 2017-03-23 11:36:33 · 339 阅读 · 0 评论 -
socket原理详解
1、什么是socket我们知道进程通信的方法有管道、命名管道、信号、消息队列、共享内存、信号量,这些方法都要求通信的两个进程位于同一个主机。但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机网络中我们就学过了tcp/ip协议族,其实使用tcp/ip协议族就能达到我们想要的效果,如下图(图片来源于《tcp/ip协议详解卷一》第一章1.3) 、转载 2017-03-23 11:35:33 · 344 阅读 · 0 评论 -
TCP通信粘包问题分析和解决(全)
在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。对于UDP,不会使用块的转载 2017-03-28 14:46:43 · 775 阅读 · 1 评论 -
BOOST 线程完全攻略 - 基础篇
C++多线程开发是一个复杂的事情,mfc下提供了CWinThread类,和AfxBeginThread等等函数,但是在使用中会遇到很多麻烦事情,例如线程之间参数传递的问题,我们一般都是把参数new一个结构体,传递给子线程,然后释放的工作交给了子线程,这样不可避免会有内存泄漏的危险,例如线程关闭的问题,我们一般用WaitForSingleObject来完成线程关闭工作,但是这个函数并不一定保证线程能转载 2017-03-21 13:51:42 · 466 阅读 · 0 评论 -
Boost.Asio入门
首先,让我们先来了解一下什么是Boost.Asio?怎么编译它?了解的过程中我们会给出一些例子。然后在发现Boost.Asio不仅仅是一个网络库的同时你也会接触到Boost.Asio中最核心的类——io_service。什么是Boost.Asio简单来说,Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。计算机网络的设计方式有很多种,但是Boost转载 2016-12-23 16:03:33 · 548 阅读 · 0 评论 -
【C++11】新特性——auto的使用
本篇文章由:http://www.sollyu.com/c11-new-features-auto/文章列表本文章为系列文章【C++11】新特性——auto的使用 http://www.sollyu.com/c11-new-features-auto/【C++11】新特性——Lambda函数 http://www.sollyu.com/c11-new-lambda-fu转载 2016-12-23 14:58:28 · 297 阅读 · 0 评论 -
交叉编译boost库
1. 确保ARM编译成功安装,并配置好环境变量。 2. 解压boost压缩包 3. 进入目录执行./bootstrap.sh, 此时形成bjam文件和project-config.jam 4. 编辑project-config.jam, 仅修改using gcc这行。因为我使用的是arm-linux-gnueabihf-gcc,所以将其改以下即可: using gcc :转载 2016-12-13 17:28:34 · 1962 阅读 · 0 评论 -
boost 1.56.0 编译及使用
boost的编译和使用,经过搜集资料和总结,记录成文。感谢文后所列参考资料的作者。1 下载地址:http://sourceforge.net/projects/boost/files/boost/1.56.0/可以选择 boost_1_56_0.7z 下载。2 编译2.1 生成boost的自用的编译工具bjam.exe解压后,使用VS2013转载 2016-12-13 14:25:40 · 266 阅读 · 0 评论 -
深入理解学习Git工作流(git-workflow-tutorial)
个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解,于是我将这部分资料进行整理放到了github上,欢迎star查看最新更新内容, https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md我们以使用SVN的工作流来转载 2016-12-06 18:21:51 · 285 阅读 · 0 评论 -
BOOST 库 thread类线程使用
thread库为C++增加了线程处理能力,它提供简明清晰的线程、互斥量等概念,可以容易地创建多线程应用程序。thread库也是高度可移植的,它支持使用最广泛的windows和POSIX[Unix下应用程序共同遵循的一种规范 ]线程,用它编写的代码不需要修改就可以在windows、unix等操作系统之上编译运行。 使用thread库[ vs2010 ] 1.包含thread头转载 2016-12-06 16:10:09 · 368 阅读 · 0 评论 -
Linux系统下编译Boost库,并在Qt Creator中使用Boost库 .
最近在在Linux下配置Qt环境,同时项目需要用到Boost库,网上关于Linux下编译Boost库和Linux系统的Qt Creator中使用Boost库这二者的教程很多,但是没有一篇贯穿全部的教程,有鉴于此,如下是全部步骤:1、下载Boost库,版本自选,建议最新版本地址:http://sourceforge.net/projects/boost/files/boost/1.5转载 2016-12-06 10:43:26 · 1890 阅读 · 0 评论 -
boost::bind的使用方法
bind - boost头文件: boost/bind.hppbind 是一组重载的函数模板.用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象.它的源文件太长了. 看不下去. 这里只记下它的用法:9.1 对于普通函数假如有函数 fun() 如下: void fun(int x, int y) {转载 2016-12-12 16:27:20 · 421 阅读 · 0 评论 -
Linux内核Socket CAN中文文档
自己在年假中空闲之余翻译的内核中Socket CAN的文档,原文地址在:http://lxr.linux.no/linux+v2.6.34/Documentation/networking/can.txt但是这篇文档没有涉及广播管理协议套接字 (SOCK_DGRAM) 的内容。另外一篇比较好的Socket CAN的英文文档是(详细介绍了广播管理协议套接字):Low转载 2016-12-02 17:12:07 · 544 阅读 · 0 评论