• 单生产者和单消费者共同操作同一个环形缓冲区的问题

    问题描述 本问题只针对单个生产者进程和单个消费者进程的问题进行讨论。 生产者进程和消费者进程之间通过共享内存的方式进行IPC通信。 环形缓冲区存放在共享内存中,并且环形缓冲区中环形缓冲单元的个数为 2^N 个(N为大于1的正整数),环形缓冲区的数据结构定义为: #define RING_BUFFER_SIZE N struct RingBuffer{ int w_pos; //环形缓冲区写入位置值 int r_pos; //环形缓冲区读取位置值 data_block data[(1<<N)]; //data_block...


  • Ubuntu 软件源详解

    什么是软件源? Ubuntu 中安装软件的方式 在 Ubuntu 中软件安装的方式和 Windows 系统中双击 exe 文件的傻瓜式软件安装的方式有很大的不同,它主要可以分为下面三种安装方式: 通过 apt 包管理工具从软件源中安装 通过 deb 格式的软件包安装 从软件源码手动编译安装 软件源介绍 Ubuntu 系统中软件源其实本质上就是一个软件仓库,在这个仓库中包含了...


  • Git 常用命令

    1. 我为什么要做这个 Cheat Sheet? 从接触 Git 到现在已经快两年多了,虽然以前入门学习 Git 时刷过一遍 《Pro Git》(这本书就像是 Git 的红宝书,非常值得你全部通读一遍),但是因为那时并没有什么机会去使用 Git,所以曾经看过的许多 Git 命令也就慢慢淡忘了,感觉自己的 Git 水平还仅仅停留在 add, commit,...


  • Linux 中的 EOF 到底是什么?

    EOF 的定义 EOF 是 end of file 的缩写,表示”文字流”(stream)的结尾。这里的”文字流”,可以是文件(file),也可以是标准输入(stdin)。 以前在学习 C 语言文件操作的时候,一直记得 EOF 就是一个标记,通过它可以判断程序是否读取到文件的末尾了,例如下面的这段代码就是将一个文本文件中的字符输出到标准输出中,并通过 EOF 来判断程序是否读到了文件末尾: #include <stdio.h> #define FILENAME "gdb_test.c"...


  • Android NDK Tombstone/Crash 分析

    前言 作为程序员,调试 Bug 永远是最痛苦的一件事情,而在所有的 Bug当中访问非法内存又是最最让人崩溃和最难发现的一个问题。 通常我们调试程序 Bug 的方法主要有下面 3 种: 打印日志信息 这种方法通过在代码中可能出现 Bug 的位置添加一些日志输出语句来跟踪整个程序的执行过程或者查看关键变量的值等等。 单步调试 这个方法则主要使用到了调试工具,例如 gdb 和 Visual Studio...