技术
文章平均质量分 54
yohoro
...
展开
-
简单即是美
1. c++ 就是在c的基础上引进了面向对象(以下简写为 oo )的特性,但是,请注意,就是这点不同,让c++ 与 c 成了截然不同的两种语言!(c++之父也是这样说的) 2. oo 只是看上去很美,实际上并没解决任何问题,开始的时候它是打着拯救软件危机的旗号来的,但现在看,可惜的是,其转载 2008-02-23 16:13:00 · 487 阅读 · 0 评论 -
输出重定向
被打印到屏幕上的信息有两种:是写到stdout的(可以用1表示)是写到stderr的(可以用2表示)如果你用command > filename或者command 1> filename的形式,只有写到stdout的信息会被重定向到filename中;如果用command 2> filename的形式,只有写到stderr的信息会被重定向到fil原创 2009-04-18 20:04:00 · 475 阅读 · 0 评论 -
指针 插入排序分析(我都晕了)
被那指针的指针、传地址等东东搞糊涂了!#if N <= 1000static void insert_sort(char *strings[], int n){ char *v, *t; char **strp, **endp; int i; endp = &strings[N-1]; i = N-2; do {原创 2009-04-18 13:53:00 · 557 阅读 · 0 评论 -
内核入门
内核入门取自 西邮linuxhttp://xiyoulinux.cn/wiki/index.php?title=%E5%86%85%E6%A0%B8%E5%85%A5%E9%97%A8目录[隐藏]1 走近Linux内核 1.1 简介 1.2 需要准备什么 1.3 开始 1.3.1 1. 精通C语言编程 1.3.2转载 2009-05-01 01:37:00 · 1290 阅读 · 0 评论 -
写给Linux内核初学者
提供的链接让我发现了很多资源------------------------------ 写给像我一样的Linux内核初学者 --孔建军(Kongove.CN)转载 2009-05-01 01:53:00 · 1215 阅读 · 1 评论 -
保护模式 VS 实模式
1:实模式:寻址采用和8086相同的16位段和偏移量,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。2:保护模式:寻址采用32位段和偏移量,最大寻址空间4GB,最大分段4GB (Pentium Pre及以后为64GB)。在保护模式下CPU可以进入虚拟8086方式,这是在保护模式下的实模式程序运行环境。 第一:实模式下程序的运行回顾. 程序转载 2009-05-05 00:39:00 · 521 阅读 · 1 评论 -
Linux下的AT&T语法(即GNU as 汇编语法)入门
汇编语言作为一种高效的,而且紧密结合硬件平台的编程语言,在操作系统,嵌入式开发等领域都有着十分重要的作用。正因为汇编依赖于硬件结构(CPU指令码),因此不同体系结构上的汇编语言也大相径庭。本文简单介绍了Linux下的AT&T语法(即GNU as 汇编语法),以及在Linux下汇编的基本方法。AT&T语法起源于AT&T贝尔实验室,是在当时用于实现Unix系统的处理器操作码语法之上而形成的,AT&T语转载 2009-05-05 00:40:00 · 1226 阅读 · 0 评论 -
内存 编址 指针
2^10 = 1K2^20 = 1M2^30 = 1G2^32 = 4G 别忘了,上述单位都是Byte字节,内存是以字节为单位编址的。可以将32位机器的内存(应该是虚拟内存)想象成一个数组,含有2^32个元素。内存地址就是这个数组的编号,从1(0x00000001)到 2^32(0xFFFFFFFF) | ———— | 0xFFFFFFFF原创 2009-05-14 21:18:00 · 387 阅读 · 0 评论 -
逻辑地址、线性地址、物理地址和虚拟地址
原帖地址:http://linux.chinaunix.net/bbs/thread-919019-1-1.html 要过年了,发个年终总结贴,只是个人理解,不包正确哈。本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。—转载 2009-05-22 14:45:00 · 696 阅读 · 0 评论 -
C puzzles and my solution
题目地址:http://www.gowrikumar.com/c/Dear visitor,Thanks for your interest in C programming. In this page, you will find a list of interesting C programming questions/puzzles, These programs listed ar原创 2009-05-30 00:02:00 · 418 阅读 · 0 评论 -
Linux驱动程序开发学习步骤
1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。 5. 写一完整驱动, 加上rea转载 2009-04-08 19:00:00 · 459 阅读 · 0 评论 -
指针数组vs数组指针
这个问题大家应该都碰到过,指针数组和数组指针,刚开始看时觉得还是能看懂,但是过些时又搞混了,最后发现还是没有真正理解。先简单从概念上说一下:指针数组:是一个数组,其元素是指针。 数组指针:是一个指针,指向一个数组类型。原创 2009-04-18 11:30:00 · 284 阅读 · 0 评论 -
linux 2.6.24 makefile文件基本介绍
目录 === 1 概述 === 2 角色分工 === 3 内核编译文件 --- 3.1 目标定义 --- 3.2 内嵌对象 - obj-y --- 3.3 可加载模块 - obj-m --- 3.4 导出符号 --- 3.5 库文件 - lib-y --- 3.6 目录递归 -转载 2009-03-14 23:29:00 · 545 阅读 · 0 评论 -
My first Makefile
First, the source file is: p631: p631.o csapp.o gcc p631.o csapp.o -o p631 -pthread p631.o: p631.c csap原创 2009-02-14 23:06:00 · 333 阅读 · 0 评论 -
csapp “链接”
链接可以在编译时由静态编译器来完成,也可以在加载时和运行时由动态链接器来完成。连接器处理的文件为目标文件(为二进制文件)包含:可重定位的、可执行的、共享的三种。 多数编译系统提供编译驱动程序comiler driver,为用户根据需求调用语言预处理器、汇编器、和连接器。驱动程序将ASCII码源文件翻译成为可执行目标文件的过程如下:驱动程序首先运行C预处理器cpp将c源程序翻译成一个AS原创 2009-02-19 13:38:00 · 613 阅读 · 0 评论 -
写给C语言初学者的话
前些天我写了一篇“Unix C语言值得注意的地方”一贴,回贴中谈到学习国外的开源软件中的高质量代码的问题,但是有朋友跟我说,在看代码的过程中感觉难度很大,想想也是如此,动辄十几万行的程序如果没有人指点的话是很难找到切入点的,所以我撰写了此文希望能对广大C语言爱好者有所帮助,在文章中有很多煽情的地方还请大家原谅,因为这篇文章使我想到了刚刚毕业的时候,所以有点感慨。同时文章中还有一些个人偏见存在,希望转载 2009-02-21 18:16:00 · 330 阅读 · 0 评论 -
C中什么时候使用static?
什么时候使用static?就像java中的private,C中的static用来说明变量或函数是私有的。当希望某些全局变量或函数只能被本文件引用,而不能被其他文件引用时,可以在定义时加上static声明。尽可能的用static属性来保护你的变量和函数是很好的编程习惯c源代码文件扮演模块的角色,任何声明带有static属性的全局变量和函数都是模块私有的。 ps:典型的ELF(可执行、原创 2009-02-21 19:35:00 · 981 阅读 · 0 评论 -
ctrl+c中断一个小示例
ctrl+c中断一个小示例代码分析:#include ;#include ;#include ;#include ;#include ;#define PROMPT "你想终止程序吗?"char *prompt = PROMPT;void ctrl_c_op(int signo){ write(STDERR_FILENO,prompt,strlen(prom原创 2009-02-24 22:06:00 · 735 阅读 · 0 评论 -
makefile 中":"和":="赋值的区别
Makefile中的"="":="、"?="和"+="区别是:"="是直接给变量赋值。":="是将":="右边中包含的变量直接展开给左边的变量赋值。"?="是在该变量没有被赋值 的情况下为其赋值。"+="是给该变量追加值。例:a = 1b = 2c := $(a) 3d = 4d ?= 5b += 6结果:a=1c=1 3d=4b=2 6#example a = orginal_value转载 2009-02-27 16:45:00 · 368 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(static): 全局变量和静态变量的存储转载 2009-02-27 22:20:00 · 252 阅读 · 0 评论 -
【摘选】linux 设备驱动程序工作的基本原理
由于用户进程是通过设备文件同硬件打交道,对设备文件的操作方式不外乎就是一些系统调用,如 open,read,write,close...., 注意,不是fopen, fread.,但是如何把系统调用和驱动程序关联起来呢?这需要了解一个非常关键的数据结构: struct file_operations { int (*seek) (struct inode * ,struct file *, o原创 2009-03-02 14:40:00 · 421 阅读 · 0 评论 -
linux 2.6 启动流程分析
内核在启动时可以传递一个字符串命令行,来控制内核启动的过程,例如:"console=ttyS2,115200 mem=64M@0xA0000000"这里指定了控制台是串口2,波特率是115200,内存大小是64M,物理基地址是0xA0000000。另外我们可以在内核中定义一些全局变量,使用这些全局变量控制内核的配置,例如usb驱动中定义了static int nousb; /*转载 2009-03-10 23:16:00 · 844 阅读 · 0 评论 -
什么是字节对齐,为什么要对齐?
现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU转载 2009-06-02 20:49:00 · 602 阅读 · 0 评论