2016-03-11 - 内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。 那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的头,...
2016-03-10 - linux平台区分大小写路径,客户端资源上传时可以用以下脚本检查大写字母并修改为小写! #!/bin/sh for file in `find . -type f -name *[A-Z]*` do dir=`dirname $file` name=`basename $file` newname=`echo $name|tr [A-Z] [a-z]` mv $file $dir/$newname...
2016-03-10 - 可以在gcc编译时添加-Wstrict-prototypes选项来获得详细的编译告警信息。如: qige@ubuntu:~$ gcc -o qz *.c -Wstrict-prototypes 以下为告警示例及解决办法(因为HTML限制,请在使用时将所有的双引号替换为和): main.c:22: warning: incompatible implici...
2016-03-08 - linux支持的哪些操作是具有原子特性的?知道这些东西是理解和设计无锁化编程算法的基...
2016-03-08 - 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。 Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库。Linux系统有几个重要的目录存放相应的函数库,如...
2016-03-08 - 1、输入设备在文件/proc/bus/input/devices中,如: 其中Handlers=kbd event2,说明其值可以在/dev/input文件夹的event2文件中读到,文件夹内容: 2、可能是受虚拟机影响,鼠标事件并不能从mousex系列的文件中读到,而是event3,键盘是event2,完整程序如下...
2016-03-07 - 本实例力求最小化实现动态链接库加载,记录下来,督促自学。 【测试环境】 CentOS 5.4 (Final)x86_64 Linux version 2.6.18-164.el5. x86_64 GCC version 4.4.2 20080704 【动态链接库】 #include stdio.h void hello() { printf(Hello Myboy!\n); } [myce...
2016-03-07 - 将wget或curl输出的内容管道给bash或者sh是一件非常愚蠢的事,例如像下面这样: wget -O - http://example.com/install.sh | sudo sh 命令解释:wget的-O参数是指明输出文件名,一般后面接具体的文件名,这里接-表示written to stdout即写入到标准输出而不保...
2016-03-07 - Linux平台动态链接库(Shared Object,SO)替换可以分为静态替换和动态替换:静态替换利用文件操作直接替换SO,新SO在下次加载时生效;动态替换利用代码注入申请并修改目标进程内存空间,实现新SO的加载和替换,新SO立即生效。 对于未被加载的原SO,利用复制...
2016-03-07 - 在Linux shell中,清屏操作是clear;在Win cmd中,清屏操作是cls。 在交互模式中使用python,如果要清屏,可以import os,通过os.system()来调用系统命令clear或者cls来实现清屏。 import os os.system(clear) 但是此时shell中的状态是: 0 首行会有一个0。...
2016-03-07 - 先来简单介绍一下GPMC。TI特有的总线但是中文资料较少,有过嵌入式驱动开发经验的人最初一定会接触GPIO,而GPMC与GPIO类似,说白了就是一种总线扩展,通过配置其寄存器来进行一系列的操作。 配置GPMC寄存器是驱动程序最先考虑的部分。首先通过查看手册找到GP...
2016-03-07 - 接触LinuxC编程没几天,发现一个小Bug。在用Fflock函数给文件加上全局锁后,仍然可以调用文件API函数对该加锁的文件进行操作,例如:写操作。 后来上网查看得知。所谓flock提供加锁,是建议性锁,也就是说,使用flock之后,并不提供锁检查(这一点实在程序员...
2016-03-06 - 本文章以ubuntu为例,仅供初学者参考。 1.为什么要写这篇文章? 我是今年的大一新生,在学校上C语言实验课之前,我习惯于用Xcode、Dev C++编写代码,然而一到实验室,ubuntu系统着实让我慌了手脚。因为ubuntu是通过终端输入指令来打开编辑器、运行gcc编译器...
2016-03-06 - 用linux编程时,我们不时会遇到Segmentation fault,其实这就是段错误。引发段错误通常是数组越界,出现野指针,在一些作业网上可能也会显示runtime error,遇到这种情况我们该怎么办?难道一行一行看代码? 显然要调试程序。这里我用的是gdb。 apple@ubuntu...
2016-03-05 - 基本概念: 在默认情况下,线程的终止状态会保存到对该线程调用pthread_join,如果线程已经处于分离状态,线程的底层存储资源可以在线程终止时立即被回收。当线程被分离时,并不能用pthread_join函数等待它的终止状态。对分离状态的线程进行pthread_join的调...
2016-03-05 - linux中大量使用函数指针钩子,导致阅读代码困难。比如想知道一个函数的调用路径,那么就只能用source insight之类的工具看代码了。有没有办法可以迅速获得调用关系的整体印象?ftrace是内核提供的一种调试工具,可以对内核中发生的事情进行跟 踪。比如函数...
2016-03-04 - 用户登录退出的日志记录在:/var/log/secure 如果需要记录每个用户执行过哪些命令等操作的记录,在/etc/profile配置文件的末尾加入以下脚本代码来实现: history USER=`whoami` USER_IP=`who -u am i 2/dev/null| awk {print $NF}|sed -e s/[()]//g` if [ $US...
2016-03-04 - 检测linux主机是否运行 xen,其原理是读取 CPUID 来判断,Xen 源代码下面有一段检测是否是 Xen 的 C 语言代码 tools/misc/xen-detect.c,这段代码提供了一个很好的例子,重写了代码,用宏替代了函数。xentest.c #include stdio.h #include string.h #define...
2016-03-04 - sed -i s/abc/xxx/g file abc修改前的字符串 xxx是修改后的字符串 file是要被修改的文件 例如: 我有一个文件是map_server #!/bin/bash # chkconfig: 2345 10 90 # description: Starts and Stops the MapServer. DIRECTORY=xxxxxx MAPSERVER_HOME=/usr/map/m...
2016-03-01 - 1.stat既有命令也有同名函数,用来获取文件Inode里主要信息(即文件类型、文件权限、创建/修改/访问时间等就是ls -l看到的相关的信息),stat 跟踪符号链接,lstat不跟踪符号链接。可以通过man 2 stat查看相关的信息。 #include sys/types.h #include sys/st...
2016-02-27 - 在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因。缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要使用ulimit命令更改coredump的设置: ulimit -c unlimited 上面的命令...
2016-02-25 - 所需头文件: #include stdio.h 例如,希望执行脚本 : mkdir testDir C++ Code: FILE *fp = popen(mkdir testDir, r); if(fp == NULL) { return; } pclose(fp); 如果执行的脚本可能产生标准输出,则可以通过fgets从fp获得: FILE *fp = popen(ls -lrt, r);...
2016-02-25 - 前言: 该脚本安装对应的是puppet的server端以及client端;具体使用时参考脚本中的参数说明; 软件环境: 客户端系统:CentOS-7-x86_64 服务器端:CentOS-7-x86_64 Ruby版本:ruby-1.8.7.374-4.el6_6.x86_64.rpm Puppet版本:3.8.4 安装脚本: #!/bin/bash #...
2016-02-25 - 函数是实现程序功能的最基本单位,每一个程序都是由一个个最基本的函数构成的。写好一个函数是提高程序代码质量最关键的一步。本文就函数的编写,从函数命名,代码分布,技巧等方面入手,谈谈如何写好一个可读性高、易维护,易测试的函数。 命名 首先从命名...
2016-02-25 - 会议,什么都不懂的经理,生产效率指标这就是你和下一个伟大软件之间的天堑。 昨天必须得发布产品。用户争闹和咆哮某个缺失的功能。老板的老板说,我们最好迅速行动起来否则就炒我们的鱿鱼。感觉一切都有心无力。 没有人满意开发人员这种已经竭尽全力改变世...
2016-02-24 - 一般在C++程序中我们会使用clock()函数来统计程序的运行时间,格式如下: clock_t begin , end; begin = clock(); //这里是要统计时间的代码 end = clock(); unsigned uRunTime = (end - begin) * 1.0 / CLOCKS_PER_SEC * 1000; 这样就得出程序运行的毫秒数...
2016-02-24 - 缘起: 安装python的包Rtree(Rtree-0.8.2),但需要先安装C语言依赖包spatialindex-src(spatialindex-src-1.8.5)。在安装完spatialindex-src后,再安装Rtree过程中出现问题: dimite@ubuntu:~/wzh/Rtree-0.8.2$ python setup.py build Traceback (most re...
2016-02-24 - 在使用内存映射操作文件之前,我们先按照常规的方式来读写文件,这种方式操作如下: 1,打开或创建文件,得到文件描述符, 2,将内存中的数据以一定的格式和顺序写入文件,或者将文件中的数据以一定的格式和顺序读入到内存; 3,关闭文件描述符; 下边是按照常...
2016-02-23 - 在Linux 系统中/var/run下有很多以pid结尾的文件,这个其实是为了保证程序以单例模式运行而设计的。程序在启动后,首先打开(如果没有则创建)/var/run/xx.pid,然后尝试去设置文件锁,如果成功,则将程序的里程ID写入该文件,写入后注意不要关闭文件或解锁;...
2016-02-23 - IPv6地址用冒号和16进制数表示,其中遇到连续的0可以作省略处理,如2001:0:0:0:0:0:0:1可以写成2001::1,这样对于书写很方便,但是带来一个额外的问题:两个地址比较的时候不能像IPv4那样调用字符串比较函数进行比较。本文通过比较两个IPv6地址的网络字节序...
2016-02-23 - 写了一个shell脚本,想每次都用nohup调用,但是又不想每次都得敲.网上搜了下,nohup只能以脚本为参数,但又不想写两个分开的脚本.下面是搜到的一种能将nohup集成到一个脚本的方法: function1(){ while true do echo function1 sleep 1 done } echo $@ | grep -q...
2016-02-23 - 平时登陆Linux时密码的输入是不回显的,而Linux-c又不支持getch()函数,所以才写了一个实现这一功能的函数! #include stdio.h #include termios.h #include unistd.h #include errno.h #define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL) //函数set_disp...
2016-02-23 - 前言 也许这个话题并不新鲜,因为LD_PRELOAD所产生的问题由来已久。不过,在这里,我还是想讨论一下这个环境变量。因为这个环境变量所带来的安全问题非常严重,值得所有的Unix下的程序员的注意。 在开始讲述为什么要当心LD_PRELOAD环境变量之前,请让我先说...
2016-02-23 - 近期要做Linux下libvirt事件审计,原计划是分析libvirt的通信数据从而进一步分析libvirt事件。这怎么看都觉得工作量浩大,第一反应就是能不能偷懒。对于一般的审计事件,首先想到的是函数截获:遍历ELF文件的导出函数,然后替换之。顺带一提,现在安卓上的进...
2016-02-23 - 这篇文章侧重点在M=`pwd`的个人理解,不足之处希望大神斧正,谢谢。 一直以为M=`pwd`是make的参数,可是这个参数也写的够简单。最近重看跟我写makefile时,发现常有这样的makefile内容: # Use make V=1 to see the full commands ifdef V ifeq ($(origin V)...
2016-02-22 - Linux是一个单内核,也就是说,Linux内核运行在单独的内核地址空间。unix也是单内核。 windows NT,windows xp是微内核的。 Linux内核态和用户态的区别 当一个任务(进程)执行系统调用而陷入内核代码中执 行时,我们就称进程处于内核运行态(或简称为内核态...
2016-02-21 - 同事的写的一个脚本,觉得非常好,实用性很强,精致短小,特记录与此,方便以后查用. 业务需求:需要把一个目录下的1000多万个文件迁移到远程机器。 思路:用wget来把文件一个一个的迁移过去,因为文件数量比较大,如果一下在循环操作,会非常慢。所以分批操...
2016-02-20 - 本文是《一种定位内存泄露的方法(Solaris)》对应的Linux版本,调试器使用gdb。主要介绍实例部分。其他请见《一种定位内存泄露的方法(Solaris)》。 实例: 模拟new失败的程序: #include stdexcept class ABC { public: virtual ~ABC(){} int i; int j; }...
2016-02-19 - 选 Python 还是 JavaScript?虽然不少朋友还在争论二者目前谁更强势、谁又拥有着更为光明的发展前景,但毫无疑问,二者的竞争在 Web 前端领域已经拥有明确的答案。立足于浏览器平台,如果放弃 JavaScript,我们也就没什么可选择的项目了。 好吧,也许答案也...
2016-02-18 - 从源码编译安装软件时,有3个步骤: ./configure make make install 根据《Linux下从源码编译安装软件中3个命令之间的关系》( http://www.linuxdiyf.com/linux/18175.html )可知,在这3个步骤中,运行configure脚本是比较重要的步骤,它产生的Makefile文件...