2016-02-18 - 要说明的几点: [root@uyha000207 bin]# echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/ usr/sbin:/usr/bin:/root/bin:/root/bin:/root/bin [root@uyha000207 ~]# echo $HOME /root 现在去root文件夹中创建b...
2016-02-18 - 多年来,我非常荣幸能和一些谦逊的公司和客户合作。我也因此有机会接触到各种不同的程序员 每个程序员都有自己独特的风格。事实上,每个项目本身都有一些独特的元素。 这些特质的交叉让我去思考我曾经审查、更新或提高过的程序代码。与其说是代码的实际逻辑...
2016-02-17 - shell 脚本默认数值是由10 进制数处理,除非这个数字某种特殊的标记法或前缀开头. 才可以表示其它进制类型数值。如:以 0 开头就是 8 进制.以0x 开头就是16 进制数.使用 BASE#NUMBER 这种形式可以表示其它进制.BASE值:2-64. 使用方法: 八进制转十进制: cha...
2016-02-17 - 在把linux kernel 代码纳入到 git管理之后,发现生成的内核版本号(在文件 include/config/kernel.release里)增加了一个 +后缀。 内核版本号是根据Makefile里提供的数字生成的。打开Makefile,文件开始可以看到: 1 VERSION = 3 2 PATCHLEVEL = 10 3 SUBLEVE...
2016-02-17 - 1、warning: function declaration isnt a prototype 这种错误也是很常见的,主要是对一些函数固定格式的错误使用。比如int function()改称int function(void) static int xxxx_init(void)记住不要缺少static,而static void xxxx_exit(void) 2、出现 warnin...
2016-02-16 - 通过proc文件系统获得,在proc文件系统中有一个名为partitions的文件。这个文件中包含本地磁盘的硬盘及分区信息。根据Linux下设备命名规则,如果设备名的最后一个字符是数字就应该是分区,否则就是硬盘。根据这个文件,还可以知道硬盘设备名称以及每个硬盘中...
2016-02-16 - 因为最近项目中需要实现一个临时数据高速存储,所以最近对内存映射文件做了一下了解,写出来与大家分享一下,因为个人水平有限也许会有这样那样的问题也恳请大家指正。 mmap是linux内存映射文件,是将文件映射成为内存地址空间的一种方式,其实,方法很简单...
2016-02-16 - 最近在调试电视盒子的时候遇到了这样一种情况: 盒子在开机的时候出现开机LOGO已经过去了,HDMI才打开,因此每次开机都看不到LOGO,于是就想怎样能调整Linux内核驱动的初始化顺序,仔细阅读代码发现: Linux内核为不同驱动的加载顺序对应不同的优先级,定义...
2016-02-16 - 有些脚本中会看到这样的语句: #!/bin/bash set -e command 1 command 2 ... exit 0 set -e 这句语句告诉bash如果任何语句的执行结果不是true则应该退出。这样的好处是防止错误像滚雪球般变大导致一个致命的错误,而这些错误本应该在之前就被处理掉。如果要...
2016-02-16 - 1.首先可以运行下面的程序检查,检查你现在的系统总共能创建多少个线程。我的系统上是i=380,也就是最多能创建380个线程。后面分析为什么是它。 // maxthread.cc , compile: gcc maxthread.cc -o thread -lpthread include stdlib.h #include stdio.h #inclu...
2016-02-16 - 在Linux 64位下分析了栈分布情况,在函数参数,局部变量等上面和32位有一些差别。现记录下来,以供参考。 首先在64位下,寄存器esp变成了rsp,ebp变成了rbp,ip变成了rip。 环境: 1.Linux内核版本: cat /proc/version Linux version 2.6.18-128.7.1.el5 (b...
2016-02-15 - 程序开发也是讲究文化的。团队里的所有成员需要像一个乐队在演唱会中所扮演的角色一样,为了共同的目标而努力。当然,程序开发还是和一般的文艺工作者不同,作为一个开发团队,每个团队成员必须要有一些相同的特点和天赋。要不然就算你是世界上最好的软件工...
2016-02-14 - 一、常用编译命令选项 假设源程序文件名为test.c。 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。 2. 选项 -o 用法:#gcc test.c -o test 作用:将test.c预处理、汇编...
2016-02-10 - 在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。 以下主要来自2.6.32的内核代码中的/usr/include/asm-generic/errno.h及errno-base.h,输出错误原因定义归纳整理如下,我们可以使用如下代码输出: /**********************************...
2016-02-10 - 如果.不在PATH里面,要执行当前目录下的可执行文件,使用全路径: ./executable-file PATH是环境变量,如果将当前目录./添加到环境变量中,那么也可以不用./,直接输入当前目录下有可执行权限的可执行文件就可以运行了。 如果要执行一个sh脚本,不管那个脚本...
2016-02-10 - 虽然写起动shell的频率非常不高。但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell。 在网上找到一个挺好的通用shell脚本。 只需要修改一些配置变量,就可以用来做起动脚本了。 并且除了能起动、还支持关闭、重启、查看是否正在运...
2016-02-10 - 用多线程的时候要添加thread库, -lpthread 创建线程 create_thread 如果线程正常退出,不会存在问题。如果线程非正常退出,那么线程中申请的资源就不能正常释放,申请内存造成内存泄漏,锁和信号量等操作容易造成死锁。 利用保护机制可以避免上述问题: pth...
2016-02-07 - fork()函数:用于创建子进程,子进程完全复制父进程的资源,相当于父进程的拷贝。具体理解,运用父进程的同一套代码,通过判断进程ID来执行不同进程的不同任务。 返回值正常为子进程ID,出错返回负值。 pipe()函数:用于创建管道,返回负值表示创建失败。 简...
2016-02-06 - echo 1500 /proc/sys/vm/ dirty_expire_centisecs 基本概念介绍 由于页高速缓存的缓存作用,写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生...
2016-02-06 - 在Linux内核源代码中有一个脚本用于整理代码的格式(风格),该脚本的内容如下: #!/bin/sh PARAM=-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1 RES=`indent --version` V1=`echo $RES | cut -d -f3 | cut -d. -f1` V2=`echo $RES | cut -d -f3 | cut -d. -f...
2016-02-04 - 今天在Cygwin上编译了一个不带O2优化的linux内核,这样结合QEMU和CDT就很容易进行内核的代码单步跟踪和调试。把对内核的修改记录一下: 1.将内核主目录下的Makefile中所有的-O2删除掉。 sed -i s/-O2//g Makefile 2.在.config 中使能CONFIG_HIGHMEM=y 3.修改...
2016-02-03 - 如果我们把内核中的用链表表示的数据结构画出来,那将是一盘又复杂又美味的。意大利面。就像在之前分析的VFS那样。 内核中的链表经典实现,改造一下,体会一下,玩味一下。 内核的经典双向循环链表结构跟普通教材上教的双向循环链表的实现不大一样,平常我们...
2016-02-03 - 在Linux内核中何时使用spin_lock,何时使用spin_lock_irqsave很容易混淆。首先看一下代码是如何实现的。 spin_lock的调用关系: spin_lock | + ----- raw_spin_lock static inline void __raw_spin_lock(raw_spinlock_t *lock) { preempt_disable(); spin_ac...
2016-02-03 - dos格式文件传输到unix系统时,会在每行的结尾多一个^M,即dos文件中的换行符\r\n会被转换为unix文件中的换行符\n,而此文件若是一个可执行文件的话,会导致此文件不能被执行,转换的方式有下面一个: vi exec.sh :set ff=unix(或者:set fileformat=unix) :wq...
2016-02-01 - uClibc和Glibc并不相同,两者有许多不同之处,而且以下不同有可能给你带来一些问题. 1.uClibc比Glibc小,虽然uClibc和Glibc在已有的接口上是兼容的,而且采用uClibc编译应用程序比采用Glibc编译应用程序要更方便,但是uClibc并没有包括Glibc中的所有接口实现...
2016-01-30 - 在生成动态库时,常常习惯性的加上fPIC选项,fPIC有什么作用和意义,加不加有什么区别,这里做下小结: fPIC的全称是 Position Independent Code, 用于生成位置无关代码。什么是位置无关代码,个人理解是代码无绝对跳转,跳转都为相对跳转。 1、不加fPIC选...
2016-01-29 - 如果单独将一条命令输出,就在命令后用 $log_file 如果输出到文件同时屏显,就在命令后用 |tee $log_file 如果全部都要重定向的话每一条命令后面并不方便,可以这么做。 在开头就声明: exec 1$log_file 表示将脚本中所有的正确输出全部追加到$log_file,错...
2016-01-28 - 一、方法一 在内核目录以外编译ko文件 1、编写hello模块代码 #include linux/init.h #include linux/kernel.h #include linux/module.h MODULE_LICENSE(GPL); MODULE_AUTHOR(kent); static int __init hello_init() { printk(KERN_ALERT hello, world - this...
2016-01-28 - Linux中运行shell脚本主要有三种方式: 1.直接命令下达: shell.sh 文件必须要具备可读与可运行 (rx) 的权限,然后: 绝对路径:使用 /home/dmtsai/shell.sh 来下达命令; 相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh 来运行 变量『PATH』...
2016-01-27 - LinuxC下的复制单一文件与其它语言的没有区别,对于文件操作皆要用到文件流、文件流的缓冲区的概念,可能这就是操作系统中的共性吧!网上对于LinuxC如何复制文件,往往直接用到system(cp 源文件 目标文件),如此不负责任的解决方案,要是别人规定不能用shell...
2016-01-27 - 一些你认为理所当然的东西,在LinuxC中不是说用就用,例如bool布尔型由于其C语言标准古老,就像如下一段,利用函数返回值判断是否正数,很平常的代码: #includestdio.h bool is_positive(int num){ if(num0){ return true; } else{ return false; } } int m...
2016-01-27 - 在LinuxC下,是没有string这个头文件的,比如如下代码: #includestdio.h #includestring int main(){ string A=aaa; string B=bbb; return 0; } 由于纯C的环境下,连字符串的概念都没有,以上的代码是直接过不了编译的。 而对于string.h这个头文件,虽然有...
2016-01-27 - LINUX下遍历目录的核心头文件是#include dirent.h,方法一般是这样的:打开目录-读取-关闭目录。相关函数有:DIR *opendir(const char *dirname);struct dirent *readdir(DIR *dirp);int closedir(DIR *dirp);注意到,在读取的时候,是返回一个叫dirent的结...
2016-01-27 - vmstat -a 命令能看到 active memory 和 inactive memory,但是它们是什么意思呢? $ vmstat -a procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free inact active si so bi bo in cs us sy id wa st 1 0 1380...
2016-01-26 - 如下图展示的是TCP的三个阶段.1,TCP三次握手. 2,TCP数据传输. 3,TCP的四次挥手。 SYN:(同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立的时候有效。表示一个新的TCP连接请求。 ACK:(确认编号,Acknowledgement Number)是对TCP请求的确认...
2016-01-25 - linux环境:ubuntu。 #! /bin/sh # Provides: server.sh # Default-Start: 2 3 4 5 # Short-Description: server testing... EXEC_PATH=/home/huangmin/cdev/project EXEC=server PID_FILE=/var/run/server.sh.pid DAEMON=/home/huangmin/cdev/project/serve...
2016-01-24 - Windows要引入的头文件是Windows.h 主要是两个函数FindFirstFile、FindNextFile MSDN里是这么说的: FindFirstFile function Searches a directory for a file or subdirectory with a name that matches a specific name (or partial name if wildcards are...
2016-01-22 - linux下程序运行时间的获取方法: 1.有时候我们要计算程序执行的时间.比如我们要对算法进行时间分析 ..这个时候可以使用下面这个函数. #include int gettimeofday(struct timeval *tv,struct timezone *tz); strut timeval { long tv_sec; /* 秒数 */ long t...
2016-01-22 - 在一次使用select()的过程中,发现select的value of return及循环调用select()其中timeout的值似乎有些超出预期,于是查了一下,发现有些地方真的没有注意到。 Linux man manual: /* According to POSIX.1-2001 */ #include sys/select.h /* According to e...
2016-01-21 - 代码如下: void printTimeStampInfo(const char *fmt,...) { va_list arp; struct timeval t; gettimeofday(t,NULL); printf([%ld.%06ld] ,t.tv_sec,t.tv_usec); va_start(arp, fmt); vprintf(fmt, arp); va_end(arp); printf(\n); fflush(stdout); } 使用...