Linux应用开发技术
文章平均质量分 76
无忧老猪
老码农一名:)
展开
-
Linux proc文件系统杂记
一、cpu占用率相关1. 系统总体cpu占用/proc/stat示例输出:[root@test]# cat /proc/stat cpu 166709 34158 278899 243448347 302989 0 345 0 0 0cpu0 84510 17883 137112 121703575 152650 0 304 0 0 0cpu1 82199 16274原创 2016-06-02 18:19:42 · 628 阅读 · 0 评论 -
C语言编程常用数值计算的高性能实现
本篇介绍一组非常简单却又很常用的数值计算的宏实现。本篇所提到的数值计算问题,相信C语言初学者都能做得出来,但是本篇中给出的例子实现却更注重效率。这些例子实现的最大特点是,消除了逻辑跳转。这样做的好处是避免了分支预测的风险,或者换句话说,可以更好地发挥处理器流水线的性能。由于本篇的问题都很简单,笔者就废话少说,直接看例子了。/* 高位全0,低N位全1 */#define Low_N_B原创 2016-04-23 16:55:15 · 4096 阅读 · 0 评论 -
gcc工具链杂记
1. 查看编译器的版本[/path/to/]gcc --version2. 查看编译器预定义的宏[/path/to/]gcc [options] -dM -E - 3. 默认链接脚本 [/path/to/]ld --verbose根据输出,可以得到链接相关的信息。例如,对于Linux PC机上的gcc工具链,可以得到类似如下的链接相关的信息。原创 2014-01-03 21:18:55 · 1668 阅读 · 0 评论 -
一个简单的Linux C程序开发框架—linux-dev-framework
Linux-dev-framework(以下简称本软件)是一个简单的Linux C程序开发框架,基于C语言和gcc工具链。 本软件内含一份简单的源码目录结构、一些实用的C例程和一套makefile编译脚本。用户可以以本软件为基础,快速开始自己的Linux C程序开发。使用此框架,在框架中新增程序及库,也无需修改makefile。本软件是开源、免费软件。本原创 2014-03-29 14:33:29 · 9913 阅读 · 4 评论 -
程序设计的兼容性问题杂谈
程序的实现,经常会随着时间的推移不断的变化。不断变化的实现,经常又需要兼容以前的实现。本文试图在这方面做一些探讨。由于在下水平相当有限,不当之处,在所难免。还望大家多多指教。所谓兼容,指的是新版本的软件能够原封不动的接纳旧版本的配置文件、命令行参数、程序间交互消息、函数接口调用等。下面分几个方面来探讨。一、程序间交互消息的兼容性这原创 2016-12-14 00:08:24 · 2603 阅读 · 0 评论 -
raw binary文件探秘
Linux下的目标文件、动态库文件、可执行文件,其格式为elf格式。elf文件是有结构的文件,其内部有丰富的信息,例如,可能包含了可执行文件的入口地址,各个节的起始地址,可重定位信息,还可能包含指令与代码行的对应关系(用于调试)。内核则利用elf文件中的相关信息,加载运行可执行文件。然而内核映像,u-boot映像这些特殊的文件,则是raw_binary文件。这当然有他的原因。以u-原创 2017-04-25 23:57:08 · 3803 阅读 · 0 评论 -
超简单!!centos 6离线源码编译安装升级gcc、binutils、automake、autoconf
centos 6系列的Linux发行版,是非常成功(具足UNIX精神)的发行版,可能大家都已经用得非常习惯了。但问题是,其内核及附带的工具软件,版本却都非常老了。centos 7上的软件版本虽然比较新,但centos 7设计风格的突变(主要是引入了很不符合UNIX精神的systemd),可能在业界也引起了不少争议。而我们苦逼的开发者,可能面临既需要使用高版本的相关组件,又不想升级到ce原创 2016-12-23 21:05:53 · 11247 阅读 · 1 评论 -
表目管理代码示例(迸发访问,多重索引查找,添加,删除,)
由于在下水平相当有限,不当之处还望大家不吝赐教。程序设计中,常常会涉及到各种各样的表目的管理。如表目的添加,删除,查找等。其中,查找操作,有可能需要支持多种方式,例如,根据id查找,根据某个属性查找,或者根据多个属性进行查找等。另外,还需要妥善处理好迸发问题,又要兼顾效率。那么要如何设计表管理模块,才能实现这些目标呢?这里上一份代码,供大家参考。注意,完整的可运原创 2017-05-21 17:57:42 · 530 阅读 · 0 评论 -
软件设计中的可移植性的考虑
由于在下水平相当有限,不当之处还望大家不吝赐教。参考Linux内核的思路,对应用程序的可移植性设计做出的思考。Linux内核中,最前期的启动代码是特定体系结构的代码,还有中断、异常、系统调用的前期都会进入特定体系结构的框架代码,然后再转入体系结构无关的代码。特定体系结构的代码,位于以体系结构名称命名的文件夹中。那么对于应用程序的设计,如何借鉴呢?以GUI程序为例。假如一原创 2017-05-22 00:39:41 · 5994 阅读 · 0 评论 -
C语言与ELF机器语言之间的关系
C语言对机器模型的抽象层次,恰到好处。C语言使得开发者,刚好从最底层的费力低效的汇编编程中解脱出来,而又没有进一步往上层做抽象。这样一来既大大提高了开发效率,又不失对程序行为的精确控制能力,还使程序获得了良好的可移植性。可谓一举三得。同时,基本C库的理念,也是只做确定正确的事。他所提供的,大体都是最小粒度的几乎不会有变数的基础例程。不过,本文是要谈一谈C源码与ELF之间的一些联原创 2016-05-18 18:22:52 · 1417 阅读 · 0 评论 -
利用libbfd获取elf可执行文件的section(节)及symbol(符号)信息
一. 安装bfd库libbfd(Binary File Descriptor library是binutils中附带的一个C库。从 http://ftp.gnu.org/gnu/binutils 下载binutils。我们这里下载binutils-2.23.2.tar.gz下载后,解压安装libbfd。方法如下:tar -xzf binutils-2.23.2.tar.gz原创 2016-05-19 19:46:24 · 7961 阅读 · 0 评论 -
C程序的基础系统代码
一、简单C程序的构建过程:[root@test]# gcc -v hello.c //首先是gcc搜集系统信息Using built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/lto-wrapperTarget: x86_64-redhat-原创 2016-05-31 10:00:02 · 719 阅读 · 0 评论 -
字节序详解
1. 首先建立如下的物理内存概念(独立于字节序)如下面的图-1所示,内存中有连续的4个字节,左边是低地址,右边是高地址。我们这里假设4个字节的地址分别是0,1,2,3。低地址 高地址|0原创 2013-11-27 12:58:14 · 1773 阅读 · 0 评论 -
Linux下获取虚拟地址对应的物理地址的方法
首先摘录如下URL对pagemap的描述。https://www.kernel.org/doc/Documentation/vm/pagemap.txt * /proc/pid/pagemap. This file lets a userspace process find out which physical frame each virtual page is map原创 2014-08-31 09:07:04 · 17642 阅读 · 10 评论 -
P2P(点到点-点对点)通信实现实例
互联网上的某些知名应用,使用了P2P通信技术。这种技术,可以让没有公网IP的两个用户进行直接的通信。这是怎么实现的呢?linux_dev_framework软件包中的p2p_server.c及p2p_client.c就是P2P通信的一个实现示例。linux_dev_framework软件包编译后,生成的程序中,包含p2p_server.exe及p2p_client.exe两个程序。原创 2015-11-06 22:22:40 · 17720 阅读 · 1 评论 -
SIGSEGV异常时打印函数调用链
C语言写的程序跑飞了,如何打印出函数调用链呢?linux_dev_framework软件包中的trace_exception_test.c就是一个实现示例。该程序故意产生一个内存访问异常,然后打出调用链。程序源码:/* * 本软件为免费、开源软件。 * 本软件的版权(包括源码及二进制发布版本)归一切公众所有。 * 您可以自由使用、传播本软件。 * 您也可以以任何形原创 2014-07-10 23:14:44 · 2239 阅读 · 0 评论 -
Linux内核巨页代码学习
巨页的实现,涉及到两个模块:hugetlb和hugetlbfs。hugetlb相当于是huge page页面管理者,页面的分配及释放,都由此模块负责。hugetlbfs则用于向用户提供一套基于文件系统的巨页使用界面,其下层功能的实现,则依赖于hugetlb。1. hugetlb模块struct hstate hstates[HUGE_MAX_HSTAT原创 2015-04-10 18:33:25 · 8655 阅读 · 0 评论 -
通过telnet查看程序中的变量及执行调试函数
如题,某些应用就支持这种功能。如何实现的呢?linux_dev_framework软件包中的telnetd4dbg_test.c就是一个实现示例。该程序运行后,用户通过telnet 127.1 10000即可登陆到此程序的调试shell环境中然后即可输入变量名查看变量值,或者输入 变量名=值 以修改变量的值,或者执行调试函数。例如,输入 my_var,即可查看变量my原创 2015-10-25 20:45:36 · 2175 阅读 · 0 评论 -
X86架构下SSE系列指令使用
X86架构下SSE系列指令使用sse指令集中的指令,一条指令可以实现多项数据运算,即SIMD-Single Instruction Multiple Data。相关资料可参考:http://blog.chinaunix.net/uid-20385936-id-3902720.html http://blog.csdn.net/fengbingchun/article/det原创 2015-10-10 18:36:41 · 5807 阅读 · 0 评论 -
如何在程序中预留一段固定的虚拟地址空间
如题。也可以说,如何为一个全局变量分配固定的地址。方法如下:在C源码中,定义一个全局变量,将此变量放到一个自定义的section中。然后,在链接程序时,通过一个链接选项,指定此自定义section的地址,就达到目的了。下面是示例程序/* link_test.c */#include #include char a[1024*1024] __attrib原创 2015-11-30 18:32:26 · 2153 阅读 · 0 评论 -
汇编代码杂记
以下面的文件来haha.S来看(从内核源码中搞了点x86汇编代码出来,然后改了改):[root@ovs_test_smb test]# cat haha.S #define ALIGN .align 4,0x90#define ENTRY(name) \ .globl name; \ ALIGN; \ name:原创 2016-03-03 14:56:17 · 731 阅读 · 0 评论 -
高性能程序设计(性能优化参考点)
一、何谓高性能? 对于给定的计算任务,程序完成它所需消耗的CPU时钟周期数越少,性能就越高;反之,性能就越低。 二、如何写出高性能的程序? 1. 尽量减少完成任务所需执行的指令数。例如,对于每次重复计算的不变的量,可以提前计算好,然后直接使用,从而消除重复计算。2. 尽量提高访存效率。影响内存访问效率的因素有cache不命中,TLB miss,频繁的核间原创 2010-03-11 22:52:00 · 1667 阅读 · 0 评论 -
股票练习题作业代码
在下水平太拙,用了最简单的探索回溯算法,所以效率很差。若有算法高手观贴,还望给点指点。//股票练习题代码 by 孙明保 -- gupiao.h#ifndef __GUPIAO_H__#define __GUPIAO_H__#include //may change to float type in futuretypedef int32_t原创 2016-03-07 14:35:24 · 1404 阅读 · 0 评论 -
calc——一个简单的Linux命令行环境计算器
在下整了一个开源的小程序——calc。项目URL:https://github.com/sunmingbao/calc 运行效果如下(某些运算符用引号括住,是为了避免被shell当作特殊字符处理):[root@localhost ~]# calc 1 + -3-2[root@localhost ~]# calc 1 "<<" 101024[root@loca...原创 2018-08-14 01:05:51 · 5653 阅读 · 0 评论