CUnit与google test安装与使用

之前工作中使用的是CUnit,新工作使用的是与google test相似的自研框架,因此本文记录单独搭建CUnit与google test的方法,用于满足日常开发中demo编写过程中的测试。CUnit可以结合gcov lcov等使用,本文不介绍此部分。

CUnit安装与使用

下载tools目录下的CUnit-2.1-2-src.tar.bz2,然后使用如下命令依次执行

$tar jxf CUnit-2.1-2-src.tar.bz2

$ cd CUnit-2.1-2

$ ./configure --prefix=/usr

$ make

$ make install

然后将CU......

[LeetCode C实现]28. Implement strStr()

Implement strStr().

Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Example 1:

Input: haystack = "hello", needle = "ll"

Output: 2

Example 2:

Input: haystack = "aaaaa", needle = "bba"

Output: -1......

可重入和非可重入函数

可重入和非可重入函数

深入理解可重入函数为何物,首先需要区分单线程程序和多线程程序。典型UNIX程序都具有一条执行线程,贯穿程序始终,CPU围绕单条执行逻辑来处理指令。而对于多线程程序而言,同一进程却存在多条独立、并发的执行逻辑流。

多线程程序与使用了信号处理函数的程序中需要注意函数是否可重入,因为信号处理函数可能会在任一时刻异步中断程序的执行,从而在同一个进程中实际形成两条(主程序和信号处理函数)独立(虽然不是并发)的执行线程。

信号

整理书中的关于信号的例子,总结相关用法与误区。

信号是发生某种事件的通知机制,可以由内核、另一进程或进程自身发送给进程。存在一系列的标准信号类型,每种都有唯一的编号和目的。

信号传递通常是异步行为,这意味着信号中断进程执行的位置是不可预知的。默认情况下,要么忽略信号,要么终止进程,要么停止一个正在运行的进程。要么重启一个已停止的进程。特定的默认类型取决于信号类型。程序可以通过signal sigaction函数来显示忽略一个信号,或者建立一个由程序员自定义的信号处理器程序,以提供信号到达时调用。出于移植性考虑最好使用sigaction函数来建立信号处理函数。

一个具有相应权限的进程可以使......

Git

GitHub与Git的区别

在Git中,开发者将源代码存入名为“Git仓库”的资料库中并加以使用。而Github与gitlab则是在网络上提供Git仓库的一项服务。也就是说GitHub上的公开的软件源代码都由Git进行管理。

生成ssh key

ssh-keygen -t rsa -C 64871 -b 4096

安装Git

GitHub提供了包含图形界面的桌面客户端,通过客户端可以完成大部分常用的仓库操作,同时可以自动更新Git的命令行版本,以适应新的场景。

GitHub Desktop

https://desktop.github.com/

GitHub的L......

从无锁锁说起

多线程编程中经常用锁来控制对全局变量的访问。多线程编程中必须确保多个线程不会同时修改同一变量,或者某一线程不会读取正在由其他线程修改的变量。下面是一个例子:

#include <stdio.h>

#include <pthread.h>

#include <unistd.h>

int sum = 0;

void* adder(void *p)

{

for(int i = 0; i < 100000; i++) // 十万

{

sum++;

}

return NULL;

}

int main()

{

pthread_t threads[10......

网络编程-简单服务器客户端实现

刷微博看到有人推荐了一篇国外讲网络编程的文章,有时间学习了下,现将部分内容整理如下已备复习查阅。

服务端:

server.c

/*

** server.c -- a stream socket server demo

*/

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <errno.h>

#include <string.h>

#include <sys/types.h>

#include <sys/socket.h&......

网络编程-inet_pton和inet_ntop函数

最近解决了一个bug,是由于之前同事对于inet_ntop和inet_pton函数的理解存在问题,因此结合网络编程卷一书中的内容,将此部分内容总结记录。

函数原形:

#include <arpa/inet.h>

int inet_pton(int af, const char *src, void *dst);

const char *inet_ntop(int af, const void *src,char *dst, socklen_t size);

首先指出的是这两个函数是随IPv6出现的新函数,对于IPv4和IPv6都适用。函数名中的p和n分别代表表达(pr......

深入理解Linux /proc/pid/maps

man手册中内容

stackoverflow

protobuf C++使用实例

由于项目中使用protobuf,因此本文学习总结protobuf-C++的基本使用,试验环境为centos7-x64.

protobuf简介

什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。

Protocol Buffers 是一种轻便高效的结构化数据存储格......