linux编程
文章平均质量分 76
terrytan18
这个作者很懒,什么都没留下…
展开
-
Linux 内核中的 GCC 特性
GCC 和 Linux 是出色的组合。尽管它们是独立的软件,但是 Linux 完全依靠 GCC 在新的体系结构上运行。Linux 还利用 GCC 中的特性(称为扩展)实现更多功能和优化。本文讨论一些重要的扩展,讲解如何在 Linux 内核中使用它们。GCC 当前的稳定版本(版本 4.3.2)支持 C 标准的三个版本:International Organization for转载 2012-09-02 14:25:40 · 357 阅读 · 0 评论 -
mtrace查看内存使用情况
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Debug起来也是比较累人。其实linux系统下有一个使用的工具可以帮忙来调试的,这就是mtrace。mtrace主要能够检测一些内存分配和泄漏的失败等。函数原型如下: void mtrace(void); void muntrace(void); 头文件为:mcheck.h转载 2013-03-15 15:29:17 · 1007 阅读 · 0 评论 -
offsetof(TYPE, MEMBER)宏和container_of(ptr, type, member)宏的实现
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)1. ( (TYPE *)0 ) 将零转型为TYPE类型指针; 2. ((TYPE *)0)->MEMBER 访问结构中的数据成员; 3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址; 4.(size_t)(&(((TYPE*)原创 2013-03-12 22:45:28 · 524 阅读 · 0 评论 -
__init 和 __exit 修饰符
static int __init initialization_function(void){/* Initialization code here */}在内核模块中经常会看见这样的函数定义,声明中的__init标志看起来有点怪;它是一个给内核的暗示,给定的函数只是在初始化使用。模块加载者在模块加载后会丢掉这个初始化函数,给它的内存可做其他用途。一个类似的标签 (__i转载 2013-02-07 14:55:54 · 975 阅读 · 0 评论 -
Armlinux GCC 交叉编译工具
http://blog.csdn.net/ruixj/archive/2009/05/30/4225886.aspxArmlinux GCC 交叉编译工具可以通过以下方式获取:1. 通过现有GNU tools 编译GNU tools源码来获取交叉编译工具。这种方法需要对GNU tools各个源码之间的版本匹配。2.使用Dan Kegel开发的cross-tool脚本来编译源转载 2013-02-05 23:22:23 · 501 阅读 · 0 评论 -
一些强大的命令
一些强大的命令再分享一些可能你不知道的shell用法和脚本,简单&强大!在阅读以下部分前,强烈建议读者打开一个shell实验,这些都不是shell教科书里的大路货哦:)1、!$!$是一个特殊的环境变量,它代表了上一个命令的最后一个字符串。如:你可能会这样:$mkdir mydir$mv mydir yourdir$cd yourdir原创 2013-01-05 13:48:03 · 470 阅读 · 0 评论 -
C函数调用shell脚本
C程序调用shell脚本共有三种方式:system()、popen()、exec系列函数1)system(shell命令或shell脚本路径); 执行过程:system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD原创 2012-12-27 15:02:38 · 663 阅读 · 0 评论 -
常用 压缩命令-vi-SHELL命令-正规表示法
压缩命令: *.Z compress 程式壓縮的檔案; *.bz2 bzip2 程式壓縮的檔案; *.gz gzip 程式壓縮的檔案; *.tar tar 程式打包的資料,並沒有壓縮過; *.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮compress filename 压缩文件 加[-d]解压 unc原创 2012-12-25 16:22:19 · 518 阅读 · 0 评论 -
多线程编程-条件变量
有的时候仅仅依靠锁住共享资源来使用它是不够的。有时候共享资源只有某些状态的时候才能够使用。比方说,某个线程如果要从堆栈中读取数据,那么如果栈中没有数据就必须等待数据被压栈。这种情况下的同步使用互斥锁是不够的。另一种同步的方式--条件变量,就可以使用在这种情况下。条件变量的使用总是和互斥锁及共享资源联系在一起的。线程首先锁住互斥锁,然后检验共享资源的状态是否处于可使用的状态。如果不是原创 2012-09-20 22:24:34 · 286 阅读 · 0 评论 -
线程的分离状态
线程的分离状态决定一个线程以什么样的方式来终止自己。线程的默认属性是非分离状态,这种情况下, 原有的线程等待创建的线程结束。只有当 pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。而分离线程不是这样子的,它没有被其他的线程所等待,自己运 行结束了,线程也就终止了,马上释放系统资源。程序员应该根据自己的需要,选择适当的分离状态。 从上面的描述中可转载 2012-09-19 22:21:07 · 371 阅读 · 0 评论 -
线程私有数据
概念及作用在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操作,最简单的办法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由Posix线转载 2012-10-05 10:40:48 · 700 阅读 · 0 评论 -
linux core dump
当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。最常出现的,几乎所有C程序员都出现过的错误就是“段错误”了。也是最难查出问题原因的一个错误。下面我们就针对“段错误”来分析core文件的产生、以及我们如何利用core文件找到出现崩溃的地方。何谓core文件 当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存转载 2012-10-05 15:35:17 · 656 阅读 · 0 评论 -
内存管理内幕
为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与 局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理。本文将介绍手工的、 半手工的以及自动的内存管理实践的基本概念。追溯到在 Apple II 上进行汇编语言编程的时代,转载 2012-08-26 22:47:12 · 452 阅读 · 0 评论 -
brk和sbrk
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从 这一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管 理下转载 2012-08-26 22:33:01 · 355 阅读 · 0 评论 -
Unix操作系统LD_PRELOAD简介
在Unix操作系统的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入Unix操作系统不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使转载 2013-03-20 13:53:44 · 584 阅读 · 0 评论