
linux编程基础
文章平均质量分 94
sdulibh
心中无敌
展开
-
系统调用的实现
一个系统调用的实现并不需要去关心如何从用户空间转换到内核空间,以及系统调用处理程序如何去执行,你需要做的只是遵循几个固定的步骤。5.4.1 如何实现一个新的系统调用为Linux添加新的系统调用是件相对容易的事情,主要包括有4个步骤:编写系统调用服务例程;添加系统调用号;修改系统调用表;重新编译内核并测试新添加的系统调用。下面以一个并无实际用处的hello系统调用为例,来演示上述几个步转载 2013-11-20 10:08:15 · 1293 阅读 · 0 评论 -
使用 GNU Libtool 创建库
介绍在不同的系统中建立动态链接库的方法有很大的差别,这主要是因为每个系统对动态链接库的看法和实现并不相同,以及编译器对动态链接库支持的选项也不太一样。对于开发人员,如果尝试将使用动态库的软件在这些系统之间移植,需要参考枯涩难懂的系统手册,以及修改相应的 Makefile,这一工作是乏味的,并且具有一定的难度。使用 GNU Libtool 可以容易的在不同的系统中建立动态链接库。它通过一个称转载 2013-12-01 15:10:44 · 759 阅读 · 0 评论 -
简述configure、pkg-config、pkg_config_path三者的关系
一、什么是configure 源码安装过程中大多会用到configure这个程序,一般的configure都是一个script,执行时可以传入必要参数告知配置项目。 configure程序它会根据传入的配置项目检查程序编译时所依赖的环境以及对程序编译安装进行配置,最终生成编译所需的Makefile文件供程序Make读入使用进而调用相关编译程式(通常调用编译程序都是gcc)来编译最终的二转载 2013-12-03 15:57:44 · 816 阅读 · 0 评论 -
使用 shell 脚本对 Linux 系统和进程资源进行监控
Shell 简介Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。它没有一般编程语言的“编译 - 链接 - 运行”过程。不仅如此,Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell转载 2013-12-12 17:03:15 · 848 阅读 · 0 评论 -
Google怎么用linux
今年的linux内核开发大会上,google的开发人员也上台做了名为“how google use linux”的演讲。我斗胆翻译注解一番――括号内为注解,欢迎读者斧正。 原文链接参见:http://lwn.net/Articles/357658/ (前面几段讲google对linux kernel代码的管理及跟进,偏细碎,不翻译了) 在google为linux转载 2013-12-13 10:54:36 · 3005 阅读 · 0 评论 -
MAVMM的安装
MAVMM的基于AMD-SVM的硬件虚拟化虚拟机管理器,但是它可以在intel平台上进行安装和使用,借助于AMD的SimNow Simulator来实现这一功能。MAVMM的编译需要64位的Windows或者Linux的支持!下面是MAVMM的安装说明,直接截取。在必要的地方,我再详细写一下安装中需要注意的事项和一些错误的解决方法。这里我实验时使用的是Ubuntu 10.10 AMD6转载 2013-12-05 22:05:07 · 1054 阅读 · 0 评论 -
Shell编程基础
本文作者:Leal授权许可:创作共享协议GNU自由文档许可证编辑人员:FireHare, Dbzhang800我们可以使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bin/bash...注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使转载 2013-12-29 16:57:51 · 790 阅读 · 0 评论 -
Linux学习路线指南
很多同学接触Linux不多,对Linux平台的开发更是一无所知。而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员,掌握Linux是一种很重要的谋生资源与手段。下来我将会结合自己的几年的个人开发经验,及对 Linux,更是类UNIX系统,及开源软件文化,谈谈Linux的学习方法与学习中应该注意的一些事。 就如同刚才说的,很多同学以前可能连Linux是什么都不知转载 2013-12-18 17:02:15 · 915 阅读 · 0 评论 -
嵌入式系统中进程间通信的监视方法
概述复杂的嵌入式系统中,常常同时运行着相当多的进程。这些进程之间频繁的进行着大量的通信动作。进程的运行状态与这些不断发生的通信有着直接和紧密的联系。通过对进程间通信的监视,开发人员可以掌控系统内部运转的状态。发现错误时,利用获取到的进程间通信的信息,调试工程师更容易发现问题之所在。但是,嵌入式系统与开发人员的接口往往较为单一。开发人员广泛使用通常是基于串口或是网络接口的终端( consol转载 2014-01-03 15:11:29 · 1249 阅读 · 0 评论 -
关于计算机专业学习的四点浅谈
一、广泛了解,从科普书籍开始 选择计算机专业的同学,也许是因为原先有一定的基础,也许是因为一时的激情,但更多的人,可能对自己的选择没有深刻的认识,或多或少对计算机专 业有一些神秘的感觉。自己究竟是否喜欢这个学科?才华能够在哪个分支领域有所施展?抑或是真的不适合这个专业?诸多疑问,解决的方法首先便是了解和认识我 们的学科。浓厚的兴趣是学好任何学科的源泉;而广泛的了解则是获得兴趣的途径。当今我们转载 2013-12-21 13:19:01 · 1560 阅读 · 0 评论 -
良性代码,恶意利用:浅谈 Return-Oriented 攻击
众多的安全漏洞中,栈溢出(stack-based buffer overflows)算是非常常见的了。一方面因为程序员的疏忽,使用了 strcpy、sprintf 等不安全的函数,增加了栈溢出漏洞的可能。另一方面,因为栈上保存了函数的返回地址等信息,因此如果攻击者能任意覆盖栈上的数据,通常情况下就意味着他能修改程序的执行流程,从而造成更大的破坏。对于栈溢出漏洞,传统的攻击方式是嵌入攻击代码,然转载 2014-01-06 11:16:16 · 1445 阅读 · 0 评论 -
Virtio:针对 Linux 的 I/O 虚拟化框架
使用 KVM 和 lguest 的半虚拟化 I/OLinux 内核支持多种虚拟化模式,并且支持的数量随着虚拟化的进步和新模式的出现(例如 lguest)而增加。但是,让这些虚拟化模式能够在 Linux 之上运行之后,又如何让它们能够在 I/O 虚拟化方面利用底层内核呢?答案是使用virtio,它为 hypervisor 和一组通用的 I/O 虚拟化驱动程序提供高效的抽象。探索 vi转载 2014-01-11 14:57:07 · 1608 阅读 · 0 评论 -
C指针与数组
a) int a; // An integer b) int *a; // A pointer to an integer c) int **a; // A pointer to a pointer to an integer d) int a[10]; // An array of 10 integers e) int *a[10]; // An array of转载 2014-01-13 10:14:16 · 887 阅读 · 0 评论 -
理解 Linux 配置文件
简介: 本文说明了 Linux 系统的配置文件,在多用户、多任务环境中,配置文件控制用户权限、系统应用程序、守护进程、服务和其它管理任务。这些任务包括管理用户帐号、分配磁盘配额、管理电子邮件和新闻组,以及配置内核参数。本文还根据配置文件的使用和其所影响的服务的情况对目前 Red Hat Linux 系统中的配置文件进行了分类。发布日期: 2010 年 9 月 21 日 级别: 初级转载 2014-02-19 13:15:47 · 912 阅读 · 0 评论 -
开机时不显示启动菜单grub
Ubuntu系统越来越流行,太多人在用了。这两天重装了Ubuntu,因为之前有Windows 7等系统,所以Ubuntu装上后出现启动菜单,默认Ubuntu启动。网上找了好多修改启动选项的方法,众说纷纭,现在总结如下:一、能上网情况下的最好方法:安装startupmanager——图形启动项管理器打开终端输入:sudo apt-get install startupmanager安装启转载 2014-04-29 16:52:26 · 6967 阅读 · 0 评论 -
使用 Crash 工具分析 Linux dump 文件
前言Linux 内核(以下简称内核)是一个不与特定进程相关的功能集合,内核的代码很难轻易的在调试器中执行和跟踪。开发者认为,内核如果发生了错误,就不应该继续运行。因此内核发生错误时,它的行为通常被设定为系统崩溃,机器重启。基于动态存储器的电气特性,机器重启后,上次错误发生时的现场会遭到破坏,这使得查找内核的错误变得异常困难。内核社区和一些商业公司为此开发了很多种调试技术和工具,希望转载 2014-04-01 15:28:13 · 877 阅读 · 0 评论 -
ystem Call Interposition: how to implement virtualization
A System Call Interposition (SCI) support tracks all the system service requests of processes.Each system request can be modified or denied.It is possible to implement tools to trace, monitor, or vi转载 2014-04-02 19:09:15 · 1038 阅读 · 0 评论 -
C语言中的宏定义
语言c编译器zendfunctionfloat目录(?)[-]简单宏定义带参数的宏运算符运算符宏的通用属性宏定义中圆括号创建较长的宏较长的宏中的逗号运算符宏定义中的do-while循环do 空操作的定义预定义宏C语言中常用的宏1. 简单宏定义简单的宏定义有如下格式:[#define指令(简单的宏)] #defin转载 2014-05-07 14:34:20 · 778 阅读 · 0 评论 -
调不尽的内存泄漏,用不完的Valgrind
调不尽的内存泄漏,用不完的ValgrindValgrind 安装1. 到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz22. 解压安装包:tar –jxvf valgrind-3.2.3.tar.bz23. 解压后生成目录valgrind-3.2.34. cd valgrind-3.2.35. 运行./autog转载 2014-05-07 15:22:51 · 4727 阅读 · 0 评论 -
如何给指定地址空间拍一个快照
需求来自于,我希望可以对 lua 虚拟机中的内容做持久化,却又不希望 stop the world 。这需要利用 os 的功能,对内存做一个快照。简单的 fork 就可以达到快照的要求,但是 fork 会快照整个进程的地址空间,这不是我想要的。这两天和几位同学讨论了各种方案,比如 memcpy ,比如 fork+exec 传递 shm_open 的 fd , fork 后 munmap转载 2014-05-08 15:32:06 · 854 阅读 · 0 评论 -
Makefile之大型工程项目子目录Makefile的一种通用写法
原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.youkuaiyun.com/gqb666/article/details/8902133,作者:gqb666 管理Linux环境下的C/C++大型项目,如果有一个智能的Build System会起到事半功倍的效果,本文描述Linux环境下大型工程项目子目录Makefile的一种通用写法,使用该方法,当该子目录内的文件有增转载 2014-04-24 13:52:42 · 5347 阅读 · 1 评论 -
xen编译时 Traceback (most recent call last):
gcc -o vhd-util vhd-util.o -Llib -lvhdlib/libvhd.so: undefined reference to `uuid_copy@UUID_1.0'lib/libvhd.so: undefined reference to `uuid_clear@UUID_1.0'lib/libvhd.so: undefined reference t原创 2014-04-24 13:50:42 · 1822 阅读 · 0 评论 -
Linux内核高端内存
Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下图。 Linux内核地址空间划分通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。 Linux内核高端内存转载 2014-04-25 12:38:38 · 714 阅读 · 0 评论 -
linux内核提供的内存操作函数
1、kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) 内核空间申请指定大小的内存区域,返回内核空间虚拟地址。在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间转载 2014-05-17 12:18:58 · 1080 阅读 · 0 评论 -
用户空间增加、缩减内存
1.brk系统调用服务例程malloc()是一个API,这个函数在库中封装了系统调用brk。因此如果调用malloc,那么首先会引发brk系统调用执行的过程。brk()在内核中对应的系统调用服务例程为SYSCALL_DEFINE1(brk, unsigned long, brk),参数brk用来指定heap段新的结束地址,也就是重新指定mm_struct结构中的brk字段。brk系转载 2014-05-17 14:50:43 · 932 阅读 · 0 评论 -
Xen基本原理
1 Xen概述1.1 简介 Xen是由剑桥大学计算机实验室开发的一个开源项目。是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS)。目前已经在开源社区中得到了极大的推动。 Xen支持x86、x86-64、安腾( Itanium)、Power PC和ARM多种转载 2014-05-18 16:31:25 · 2061 阅读 · 0 评论 -
malloc()/free()的实现
malloc()/free()的实现目录brk()/sbrk()C 风格的内存分配程序一个简单的分配程序参考malloc()/free()是C语言标准库中的内存分配函数。C标准库中与内存分配相关的函数还有:#include void *malloc(size_t size);void *calloc(size_t nobj, size_t size)转载 2014-05-17 12:26:48 · 1150 阅读 · 0 评论 -
内存管理之程序内存分布
在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中。这个沙盘就是虚拟地址空间(virtual address space)。1 32位虚拟内存布局在32位模式下虚拟地址空间总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每一个进程拥有一套属于它自己的页表,但是还有一个隐情。只要虚拟地址被使用,那么它就会转载 2014-04-26 14:17:31 · 1409 阅读 · 0 评论 -
TCP数据流稳定性--TCP分片,重组及乱序
1、IP分片的情况。IP软件包有一个[分片]和[重组]模块,一个IP数据报在传输中可以被ip软件包的[分片]模块分片,在目的接收端B的IP软件包 的[重组]模块重新组合。接收端B的IP软件包如果收到乱序的IP报文,是不会把这个包交付到高层TCP协议的,直到收到同一个IP报文的全部分片。所 以,如果发送端的FIN被分片,接收端B在收到完整的此IP数据报之前,TCP模块不会收到这个包的任何分片。原创 2014-05-12 11:56:43 · 1874 阅读 · 0 评论 -
Makefile文件和shell脚本
1、在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的。比如如下代码就是没有任何输出:VAR="Hello"echo "$VAR"all: .....以上代码任何时候都不会输出,没有在target内,如果上述代码改为如下:VAR="Hello"all: echo "$VAR" .....以上代码,在make all的时候转载 2014-04-26 15:34:21 · 889 阅读 · 0 评论 -
Shell脚本调试技术
关于作者:曹羽中,在北京航空航天大学获得计算机软件与理论专业的硕士学位,具有数年的 unix 环境下的 C 语言,Java,数据库以及电信计费软件的开发经验,他的技术兴趣还包括 OSGi 和搜索技术。他目前在IBM中国系统与科技实验室从事系统管理软件的开发工作,可以通过caoyuz@cn.ibm.com与他联系。本文全面系统地介绍了shell脚本调试技术,包括使用echo, tee转载 2014-05-13 16:48:22 · 777 阅读 · 0 评论 -
c语言调用shell脚本或命令
1、system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #include定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的转载 2014-05-13 16:12:55 · 1246 阅读 · 0 评论 -
非连续内存区管理
为什么需要高端内存目前来说32位x86架构的计算机体系结构是最为流行的。在这种体系结构中,Linux内核把4GB的虚拟内存地址空间划分为3GB大小的用户空间和1GB大小的内核空间。在传统理论上的32位系统中,内核可以将所有的物理内存映射到地址空间中去,这样做有几点好处:※ 内核可以直接存取任何物理内存,这可能简化处理和加快速度。※ 可以使用指针直接存取内存中的对象。转载 2014-05-17 11:49:41 · 2426 阅读 · 0 评论 -
xen tools代码结构
XenAPI:一个Xen的项目,目的是提供管理控制Xen所需要的数据模型和远程调用接口。XenStore:一个存储Xen运行信息的机构,包含各个VM的信息,类似于Win中的注册表。libxc 是一个C语言库,它提供了一些简单易用的API,使用户程序可以方便的和Hypervisor进行通信。它的工作原理很简单,主要封装了dom0中的/proc/xen/privcmd,/dev/x转载 2014-07-17 14:08:06 · 1183 阅读 · 0 评论 -
Win2K下关联进程/端口之代码初步分析
--------------------------------------------------------------------------------2001-12-17 9:11:00 Shotgun@xici.net在西祠或者中绿的BBS中,经常见到网友问:如何才能关联我的进程和端口呀?没错,关联进程和端口是一个非常有用的功能,你可以清楚地知道哪些程序在使用哪些端口,对于转载 2014-07-03 11:33:58 · 871 阅读 · 0 评论 -
微软资深软件工程师:阅读代码真的很难
编者按:原文作者EricLippert是一名资深软件设计工程师,从1996年起一直在微软开发部门任职,协助设计并实现VBScript、JScript、JScript.NET、Windows Script Host、Visual Studio Tools for Office 和 C#。 Escalation的工程师JeremyK在他的博客中问到:你是怎么教人们快速深入挖掘不熟悉的转载 2014-08-07 09:14:45 · 1352 阅读 · 0 评论 -
Linux内存管理原理
本文以32位机器为准,串讲一些内存管理的知识点。 1. 虚拟地址、物理地址、逻辑地址、线性地址 虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址自不必提。内核的虚拟地址和物理地址,大部分只差一个线性偏移量。用户空间的虚拟地址和物理地址则采用了多级页表进行映射,但仍称之为线性地转载 2014-08-20 17:17:38 · 1202 阅读 · 0 评论 -
libnids抓不到包
1.是因为libnids默认是从第一个可用网络设备上抓包,如果你的数据不是走第一个可用网络设备,而是走其它的网络设备。则可能出现上面的情况。解决方法:nids_params.device="eth1";if (!nids_init ()) { fprintf(stderr,"%s/n",nids_errbuf); exit(1); }2.转载 2014-08-07 19:59:18 · 2274 阅读 · 2 评论 -
C语言中被常用到的宏
不管用什么语言编写程序,都会用到一些灵活的、简约的风格来实现简单的应用。C语言(当然也包括其他语种),设计良好的宏定义,不但可以使代码易懂耐用,而且也能大幅度提升自己对语言的掌控和应用能力,使得“面前的”代码量更少,实现的功能却不随之减少。不过,必须有度和并且具备极强的掌控力。1、防止头文件被重复包含(写代码必须注意也是最基本的一点)1 #ifndef _HEADER_FILE_H转载 2014-08-08 15:26:51 · 848 阅读 · 0 评论 -
使用 /proc 文件系统来访问 Linux 内核的内容
这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux® 内核空间和用户空间之间进行通信。在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。本文对 /proc 虚拟文件系统进行了介绍,并展示了它的用法。转载 2014-08-10 14:15:50 · 801 阅读 · 0 评论