- 博客(34)
- 资源 (22)
- 收藏
- 关注
原创 dd命令简介
先简要介绍dd的参数,后边通过几个实例介绍dd的应用,参考了其他网友的资料,在此一并感谢 小菜水平有限文中有什么错误请大家指正,关于dd还有什么好的使用方法,可以贴出来,小菜会及时更新 dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 1. 命令简介 dd 的主要选项: 指定数字的地
2013-10-08 23:16:14
712
原创 一个C语言程序被编译的全过程
编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。编译的完整过程:C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、.o、.a、.ko)-->链接程序(.exe、.elf、.axf等)1
2013-09-22 16:27:10
1680
原创 Linux Socket编程
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型
2013-09-12 23:31:32
720
原创 c语言内存泄露示例
存在内存错误的 C 和 C++ 程序会导致各种问题。如果它们泄漏内存,则运行速度会逐渐变慢,并最终停止运行;如果覆盖内存,则会变得非常脆弱,很容易受到恶意用户的攻击。从 1988 年著名的莫里斯蠕虫 攻击到有关 Flash Player 和其他关键的零售级程序的最新安全警报都与缓冲区溢出有关:“大多数计算机安全漏洞都是缓冲区溢出”,Rodney Bates 在 2004 年写道。在可以
2013-08-27 19:57:42
1770
原创 Linux中的工作队列
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。I、
2013-08-27 18:29:29
632
原创 MAC地址与IP地址绑定策略的破解
1 引言 对“ip地址盗用”的解决方案绝大多数都是采取MAC与IP地址绑定策略,这种做法是十分危险的,本文将就这个问题进行探讨。在这里需要声明的是,本文是处于对对MAC与IP地址绑定策略安全的忧虑,不带有任何黑客性质。 1.1 为什么要绑定MAC与IP 地址 影响网络安全的因素很多,IP地址盗用或地址欺骗就是其中一个常见且危害极大的因素。现实中,许多网络应用是基于
2013-08-26 09:54:23
1196
原创 关于/usr/bin/env
在linux的一些bash的脚本,需在开头一行指定脚本的解释程序,如:#!/usr/bin/env python再如:#!/usr/bin/env perl#!/usr/bin/env zimbu但有时候也用#!/usr/bin/python和#!/usr/bin/perl那么 env到底有什么用?何时用这个呢?脚本用env启动的原因,是因为脚本解释器在li
2013-08-05 16:44:46
1017
原创 C语言运算符的优先级
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .成员选择(对象)对象.成员名
2013-08-02 11:44:57
739
原创 gcov和lcov代码覆盖率工具
1.GCOV查看arm-linux代码覆盖率 一、 关于gcov工具gcov伴随gcc 发布。gcc编译加入-fprofile-arcs -ftest-coverage 参数生成二进制程序,执行测试用例生成代码覆盖率信息。1、如何使用gcov用GCC编译的时候加上-fprofile-arcs -ftest-coverage选项,链接的时候也加上。fprofi
2013-07-31 17:54:18
2765
原创 等待队列(二)
通过 前一篇文章 的介绍我们队等待队列有了一个比较具体的认识,本文将来分析一下等待队列是如何睡眠一个进程和如何唤醒一个进程的。使用等待队列前通常先定义一个等待队列头:static wait_queue_head_t wq ,然后调用wait_event_*函数将等待某条件condition的当前进程插入到等待队列wq中并睡眠,一直等到condition条件满足后,内核再将睡眠在等待队列wq上的
2013-07-31 14:35:18
715
原创 等待队列(一)
在Linux内核中等待队列有很多用途,可用于中断处理、进程同步及定时。我们在这里只说,进程经常必须等待某些事件的发生。等待队列实现了在事件上的条件等待: 希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制全。因此,等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒它们。等待队列由循环链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头(wait queue h
2013-07-31 14:33:38
712
原创 编译Linux内核
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。本文将以RedHat Linux 6.0(kernel 2.2.
2013-07-31 10:57:13
960
原创 C语言中scanf/fscanf 的%[]和%n说明符的使用方法
标准输入输出函数%[]和%n说明符的使用方法 scanf fscanf,均从第一个非空格的可显示字符开始读起! 标准输入输出函数scanf具有相对较多的转换说明符,它常常作为入门级函数出现在各种教材中。但奇怪的是,[]和n这两种都为c89/c99所规定的标准说明符却鲜少在大多数教材中出现。虽然[]和n说明符的使用频率不及其它说明符,但两者在程序设计中的作用仍然不可小视,
2013-06-19 11:31:20
1792
原创 迪杰斯特拉算法--数据结构
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设
2013-06-18 22:44:07
1119
原创 arping命令
arping是用于发送arp请求到一个相邻主机的工具;arping使用arp数据包,通过ping命令检查设备上的硬件地址。语法:[root@ha01 ~]# arpingUsage: arping [-fqbDUAV] [-c count] [-w timeout] [-I device] [-s source] destination -f : quit on firs
2013-06-18 16:02:21
1370
原创 汉诺塔--(数据结构)
我的数据结构学习从汉诺塔开始,这个简单的算法我可是整整想了一晚上,现在终于有点明白了,上机单步了几遍,有所了解,,还是写点什么以供以后参考,也希望能对正在学算法的盆友有所裨益······ 总得来说汉诺塔就是层叠递归调用的典型例子,一直是利用A—>B A-->C B-->C这样的单个步骤。 具体来说,当盘数大于一时,不违背原则下(过程中总是大在下小的在上)
2013-06-18 15:39:09
1023
原创 动态切换 Linux 使用的 CPU 数量
动态切换 Linux 使用的 CPU 数量摘要: 由于要测试一些代码,其运行结果会受到多核并行的影响,所以希望能够调整使用的 CPU 数量。网络上之前看到的方法是在内核的启动参数上添加一个 maxcpus,但是如果这样的话每切换一次都要重启一次,是在太麻烦了。想 ...由于要测试一些代码,其运行结果会受到多核并行的影响,所以希望能够调整使用的 CPU 数量。网络上之前看到的方法
2013-06-14 16:23:28
1573
原创 指定进程运行的CPU
coolshell最新的文章《性能调优攻略》在“多核CPU调优”章节,提到“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起。”。在文章中提到了Linux下的一个工具,taskset,可以设定单个进程运行的CPU。同时,因为最近在看redis的相关资料,redis作为单进程模
2013-06-14 10:42:26
985
原创 perf event
Perf Event 是一款随 Linux 内核代码一同发布和维护的性能诊断工具,由内核社区维护和发展。Perf不仅可以用于应用程序的性能统计分析,也可以应用于内核代码的性能统计和分析。得益于其优秀的体系结构设计,越来越多的新功能被加入Perf,使其已经成为一个多功能的性能统计工具集 。本文将介绍 Perf 在应用程序开发上的应用。 Perf 简介 Perf 是用来进行软件性能
2013-06-12 21:59:32
990
原创 KMP匹配算法
在开发中,经常会遇到在一个字节数组中,查找一个子数组的问题。如果不是字节数组,而是字符串的话,直接通过 string.IndexOf 就可以解决,对于字节数组还是需要做一点功课。 因为字符串比较容易观察,所以,我们首先通过字符串来分析,然后,再在字节数组上实现。 问题:对于一个源字符串 source = "abababaababacb" 来说,查找其中包含子
2013-06-05 10:24:14
724
转载 linux内核的启动流程
Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码,主要作用是检查CPU ID, Architecture Type,初始化BSS等操作,并跳到start_kernel函数。在执行前,处理器应满足以下状态: r0 - should be 0 r1
2013-05-23 11:12:01
720
原创 ubuntu 10.04下的配置tftp服务器和开发板上tftp命令的使用方法
ubuntu 10.04下配置tftp服务器:第1步:安装tftp所需的软件。首先需要安装tftp-hpa,tftpd-hpa,前者是客户端,后者是服务程序,在终端下输入 sudo apt-get install tftp-hpa tftpd-hpa,安装tftp-hpa和tftpd-hpa。然后还需要安装xinetd,在终端下输入 sudo apt-get install xinet
2013-05-17 23:00:21
1221
原创 kermit的安装、配置、使用
根据网上查的资料和自己的亲身体验,minicom在linux下确实不好用,有时会不通信,我就碰到了这样的问题,minicom连接不上开发板。所以,根据网友的推荐,使用kermit作为超级终端。安装-------------------------------------- # apt-get install ckermit 修改kermit的配置文件配置
2013-05-17 22:30:46
744
原创 Linux内核定时器函数mktime
Linux源码中的mktime算法解析 我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月日时分秒是分开存储的。 那么,要把它转化为系统便于处理的time_t类型,就需要算法进行转换。 我们都知道我们的公历还是比较复杂的,有大月小月,有闰年非闰年,处理起来会很麻烦。 但是Linux的源代码仅仅用了短短的几行就
2013-05-15 10:31:35
783
原创 linux下的inittab文件
inittab为linux初始化文件系统时init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。基本格式id:runlevels:action:process 其中某些部分可以为空,下面我们逐一介绍。id1~2个字符,配置行的唯一标识,在配置文件中不能重复。r
2013-05-15 09:17:49
767
原创 ubuntu 10.04 配置tftp
第1步:安装tftp所需的软件。首先需要安装tftp-hpa,tftpd-hpa,前者是客户端,后者是服务程序,在终端下输入 sudo apt-get install tftp-hpa tftpd-hpa,安装tftp-hpa和tftpd-hpa。然后还需要安装xinetd,在终端下输入 sudo apt-get install xinetd,安装好xinetd。第2步: 配置相关
2013-05-10 10:18:29
626
原创 硬盘安装ubuntu
1.下载所要安装的ubuntu光盘到本地的一个不用的硬盘分区的根目录下面,将其进行挂在 例如:mount ubuntu-12.04.1-desktop-amd64.iso /mnt 将挂载后的/mnt/casper/ 目录下面的 initrd.lz 和 vmlinuz 两个文件拷贝到一个硬盘分区的根目录下面2.在原有的linux系统的基础之上修改/boot/grub/grub
2013-05-09 14:59:33
609
原创 静态库和动态库的区别
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 静态库和动态库的区别1. 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的
2013-05-07 22:50:58
576
原创 Linux包管理器
使用 Linux 系统总是免不了要接触包管理工具。比如,Debian/Ubuntu 的 apt、openSUSE 的 zypp、Fedora 的 yum、Mandriva 的 urpmi、Slackware 的 slackpkg、Archlinux 的 pacman、Gentoo 的 emerge、Foresight 的 conary、Pardus 的 pisi,等等。DistroWatch 针对
2013-05-07 22:47:47
840
原创 mini2440 基于中断的按键驱动
Mini2440 具有6 个用户测试按键,它们都是连接到CPU 的中断引脚。在/linux-2.6.32.2/drivers/char/目录下创建一个新的驱动程序文件mini2440_buttons.c#include #include #include #include #include #include #include #include #includ
2013-04-26 21:52:29
703
原创 调整内核printk的打印级别
有时调试内核模块,打印信息太多了,可以通过修改/proc/sys/kernel/printk文件内容来控制。默认设置是6 4 1 7# cat /proc/sys/kernel/printk7 4 1 7该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。关于不同日志级别的更多信息,请查阅syslog(2)联机帮助。上
2013-04-24 16:23:44
11079
原创 linux驱动程序--led(tiny6410)
Tiny6410的linux驱动程序:#include#include#include#include#include#include#include#include#define DEVICE_NAME "tiny6410-led"#define LED_IOC_MAGIC 'l'#define LED_IOCGETDAT _IOR(LED
2013-04-17 10:06:14
889
原创 kprobe和systemtap
内核探测kprobekprobe(内核探测,kernel probe)是一个动态地收集调试和性能信息的工具,如:收集寄存器和全局数据结构等调试信息,无需对Linux内核频繁编译和启动。用户可以在任何内核代码地址进行陷阱,指定调试断点触发时的处理例程。工作机制是:用户指定一个探测点,并把用户定义的处理函数关联到该探测点,当内核执行到该探测点时,相应的关联函数被执行,然后继续执行正常的代码路径
2013-04-09 10:19:46
3938
原创 哈希表
哈希表结构:#include#include#include#define ok 1#define fail 0typedef struct Tnode { int data; struct Tnode *next; } Node;typedef stru
2013-04-02 10:29:46
548
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人