随笔分类 -  Linux

柔性数组--变长数组
摘要:int init_Department(manager *pt){ assert( NULL != pt && pt->p != NULL) ; pt->p->Manager = 10; pt->p->PM =100; pt->p->ProgrammerNo[... 阅读全文

posted @ 2014-11-09 22:51 程良 阅读(173) 评论(0) 推荐(0) 编辑

linux下C编程初篇
摘要:对于程序设计员来说,makefile是我们绕不过去的一个坎。可能对于习惯Visual C++的用户来说,是否会编写makefile无所谓。毕竟工具本身已经帮我们做好了全部的编译流程。但是在Linux上面,一切变得不一样了,没有人会为你做这一切。编代码要靠你,测试要靠你,最后自动化编译设计也要靠你自己。想想看,如果你下载了一个开源软件,却因为自动化编译失败,那将会在很大程度上打击你学习代码的自信心了。所以,我的理解是这样的。我们要学会编写makefile,至少会编写最简单的makefile。 首先编写add.c文件,#include "test.h" #include int 阅读全文

posted @ 2014-03-18 22:26 程良 阅读(193) 评论(0) 推荐(0) 编辑

linux & windows下的动态库制作
摘要:动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。有了这个特点,我们就不难发现为什么很多软件的补丁其实都是以动态库发布的。 那么,在Linux上动态库是怎么生成的呢?#include "test.h" int add(int a, int b) { return a.. 阅读全文

posted @ 2014-03-18 22:24 程良 阅读(429) 评论(0) 推荐(0) 编辑

linux下静态库的制作
摘要:在我们编写软件的过程当中,少不了需要使用别人的库函数。因为大家知道,软件是一个协作的工程。作为个人来讲,你不可能一个人完成所有的工作。另外,网络上一些优秀的开源库已经被业内广泛接受,我们也没有必要把时间浪费在这些重复的工作上面。 既然说到了库函数,那么一般来说库函数分为两种方式:静态库和动态库。两者的区别其实很小,静态库是必须要链接到执行文件中去的,而动态库是不需要链接到最后的执行文件中的。怎么理解呢?也就是说,对于最后的执行文件而言,你是否删除静态库无所谓。但是,一旦你删除了动态库,最后的执行文件就玩不转了。 今天我们讨论的问题是静态库。为了显示windows和linux创建静态库之... 阅读全文

posted @ 2014-03-18 22:23 程良 阅读(415) 评论(0) 推荐(0) 编辑

Linux下的Shell工作原理
摘要:Linux下的Shell工作原理 Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不属于内核部分,而是在核心之外,以用户态方式运行。其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口。系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序。它的执行过程基本上按如下步骤: (1)读取用户由键盘输入的命令行。 (2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的形式。 (3)终端进程调用fork( )建立一个子进程。 (4)终端进程本身用系统调用wait4( )来等待子进程完成(如果是后台命令. 阅读全文

posted @ 2014-03-15 11:08 程良 阅读(1322) 评论(2) 推荐(0) 编辑

进程上下文&中断上下文
摘要:文章出自http://hi.baidu.com/bkhcvzdvmjfkpyr/item/5444001fa68d065bf1090ea6处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。进程上下文用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。中断 阅读全文

posted @ 2014-03-13 11:53 程良 阅读(212) 评论(0) 推荐(0) 编辑

linux下设备驱动的结构&编译&加载
摘要:构造和运行模块insmodmodprobermmod用来装载模块到正运行的内核和移除模块的用户空间工具。#includemodule_init(init_function);module_exit(cleanup_function);用于指定模块的初始化和清除函数的宏。__init__initdata__exit__exitdata仅用于模块初始化或清除阶段的函数(__init 、__exit)和数据 (__initdata、__exitdata) 标记。标记为初始化的项目会在初始化结束后丢弃;而退出项目在内核为被配置为可卸载模块的情况下被丢弃。内核通过将相应的目标对象放置在可执行文件的特殊E 阅读全文

posted @ 2014-03-13 11:38 程良 阅读(268) 评论(0) 推荐(0) 编辑

自旋锁&信号量
摘要:1. 自旋锁 Linux内核中最常见的锁是自旋锁。一个自旋锁就是一个互斥设备,它只能有两个值:"锁定"和"解锁"。如果锁可用,则"锁定"位被设置,而代码继续进入临界区;相反,如果锁被其他进程争用,则代码进入忙循环并重复检查这个锁,直到锁可用为止。这个循环就是自旋锁的"自旋"。自旋锁最多只能被一个可执行的线程持有。如果一个执行线程试图获得一个被争用的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新可用。注意,同一个锁可以用在多个位置。缺点:一个被争用的自旋锁使得请求它的线程在等待锁重新可用时自旋(特别浪费处理器 阅读全文

posted @ 2014-03-13 11:31 程良 阅读(1128) 评论(0) 推荐(0) 编辑

嵌入式Linux的启动过程
摘要:1.了解 Linux 最初是由瑞典赫尔辛基大学的学生 Linus Torvalds在1991 年开发出来的,之后在 GNU的支持下,Linux 获得了巨大的发展。虽然 Linux 在桌面 PC 机上的普及程度远不及微软的 Windows 操作系统,但它的发展速度之快、用户数量的日益增多,也是微软所不能轻视的。而近些年来 Linux 在嵌入式领域的迅猛发展,更是给 Linux 注入了新的活力。 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(bootloader), Linux 内核,文件系统,应用程序。其中 bootloader是系统启动或复位以后执行的第一段代码,.. 阅读全文

posted @ 2014-03-13 11:24 程良 阅读(2478) 评论(1) 推荐(0) 编辑

【转载】vim 中文帮助手册的安装
摘要:本文出处http://hi.baidu.com/bkhcvzdvmjfkpyr/item/9c238224c1a69498b6326360 vim自带的帮助手册是英文的, 对平时编程的人来说没有多大阅读困难, 何况还有"星级译王"呢, 可偏偏有一帮人将其翻译成了中文, 可偏偏我又挡不住诱惑将它安装了, 唉.......又痛失一个学习英文的好机会, 下不为例.大家看看我的中文帮助界面吧:(--- 图2 ---)安装方法:在下面的网站下载中文帮助的文件包:http://vimcdoc.sf.net (English)http://vimcdoc.sourceforge.net/ 阅读全文

posted @ 2014-03-13 10:53 程良 阅读(273) 评论(0) 推荐(0) 编辑

面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)
摘要:/*-------------------------*先申明下,本人是个菜鸟,刚开始接触驱动程序编写,交代下开发环境(主机系统redhat6.3,开发板ARM-s3c6410)以watchdog (看门狗,俗称狗中断)为例,编写简单的中断(驱动)-------------------------*/#include #include #include #include #include #include #include MODULE_LICENSE("GPL");MODULE_AUTHOR("cheng");typedef struct mydev{ 阅读全文

posted @ 2014-03-12 20:34 程良 阅读(375) 评论(0) 推荐(0) 编辑

Linux下用gdb 调试、查看代码堆栈
摘要:Linux中用gdb 查看代码堆栈的信息core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的。调试的话输入: gdb filename core filename就是产生core文件的可执行文件,core就是产生的dump文件查看栈信息—————当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。下面是一些查看函数调用栈信息的GDB命令:backtracebt打印当前的 阅读全文

posted @ 2014-03-12 19:06 程良 阅读(117147) 评论(2) 推荐(2) 编辑

导航