2015-11-12 - 下面以工程libtest为例说明gcc创建和使用静态库、动态库的过程,libtest目录结构和内容如图1所示,其中三个文件hello.h,hello.c和main.c的内容如下。 图1 libtest/include/hello.h #ifdef _HELLO_H_ #define _HELLO_H_ void hello(); #endif libtest/lib/he...
2015-11-12 - 环境和工具: 编译环境: Ubuntu 15.04 工具:Buildroot-2015.08.1 (http://buildroot.uclibc.org/) Qemu 源码: 引导程序:grub-0.97-i386-pc.tar.gz 文件系统: busybox-1.23.2 虚拟机:virtual box 一、使用buildroot制作编译工具链 buildroot 会自动通过网...
2015-11-12 - 在软件开发的领域中,这个有害的编程习惯基本上都是由不良的编码习惯造成的,只有能改变这些不良习惯,你的工作起来会更轻松更有效率。 1.总出现错误的变量名和函数名拼写 让很多人想不通的是,为什么大家都知道这个习惯对自己没有好处,为什么还是有人让他...
2015-11-10 - 1,支持一键上传。 2,自动生成指定大小上传文件。上传完成后,自动删除。 3,支持代理模拟上传。 4,里面的up脚本 if [ $1 = ]; then echo sh uptest 3600 upload.qiniu.com ip filesize exit 1 else dd if=/dev/zero of=$4M.file bs=1m count=$4 let time=...
2015-11-10 - 1.橡皮鸭debug法 也许大家都有过这样的经历,那就是当你在和别人讨论问题时,突然就有了答案和别的想法,这是因为当你和别人一起讨论时会让你的大脑重新组织问题,这样的情况下,你的聊天对象就是橡皮鸭。所以我们每个人都应该积极主动的成为对方的橡皮鸭,...
2015-11-09 - (1)字符串: file=/dir1/dir2/dir3/my.file.txt 我们可以用 ${ } 分别替换获得不同的值: ${file#*/}: 拿掉第一条 / 及其左边的字串:dir1/dir2/dir3/my.file.txt ${file##*/}:拿掉最后一条 / 及其左边的字串:my.file.txt ${file#*.}: 拿掉第一个 . 及其...
2015-11-08 - 默认情况下,在$HOME/.bashrc定义了一系列的alias,用来简化操作,如常用的ls的别名: # some more ls aliases alias ll=ls -alF alias la=ls -A alias l=ls -CF 如果存在~/.bash_aliases文件,则会载入这个文件里面所有的alias的定义,该文件的格式和上面的...
2015-11-08 - 如何使我设置好setuid的shell脚本运行起来呢?[这个说起来有点复杂,但绝对是一个经常被提及的问题。感谢Maarten Litmaath为此做出的解答,同时感谢下面提到的indir项目组。] 我们首先假设你在一台UNIX的机器(例如:4.3BSD或者SunOS)旁边,并且了解所谓的...
2015-11-07 - 1.开发环境 软件 版本号 Ubuntu 15.04 JDK 1.7.0_79 Scala 2.10.4 spark-assembly 1.3.1-hadoop2.4.0 注意:这里spark-assembly-1.31.-hadoop2.4.0必须要用scala2.10.4,用其他高版本会报错。 2.linux 下安装sbt 配置Intellij环境 linux安装sbt详细过程见这...
2015-11-07 - (如果ENDIANNESS=l表示系统为little endian,为b表示big endian )。 int main(void) { static union { char c[4]; unsigned long l; } endian_test = {{l, ?, ?, b}}; #define ENDIANNESS ((char)endian_test.l) printf(ENDIANNESS:%c/n, ENDIANNESS); // Out...
2015-11-06 - 安装gettext sudo yum install gettext gettext工具 gettext: 进行translate。 xgettext: 从程序中抽取调用gettext进行本地化的字符串,生成一份.po结尾的配置文件。 msgfmt: 将配置好的本地化配置文件进行转换成gettext使用的格式。 准备demo.py #encoding=...
2015-11-06 - 在实际的软件开发项目中,不是每一行代码都需要我们亲自写。在我们的软件产品中,有一些代码(尤其是函数)的出现频率很高,它们可以被当作公共代码来反复使用。为了避免重复劳动,我们就把这些公共代码编译为库文件,供需要的程序调用。在Linux中,库分为静态...
2015-11-05 - 1.下载内核源码2.6.36.4 2.建立文件夹~/linux/linux-dirty cd ~linux/linux-dirty把解压缩后的内核源码存入此目录 qian@ubuntu:~/linux/linux-dirty$ ls arch crypto fs Kbuild Makefile REPORTING-BUGS sound block Documentation include kernel mm sample...
2015-11-05 - 最近读了一些网上对Linux 设备模块解释的文章,对linux 设备原理有了初步的了解。 现以下图作以学习成果记录。 一.建立bus 任何一个Device 都是要利用bus 来进行通信的。所以在你要在建立一个Device之前要确定它属于哪个bus。在没有现成的bus可以利用的情况...
2015-11-05 - 1.建立等待队列 在include/linux/completion.h中对completion的定义如下 struct completion { unsigned int done; wait_queue_head_t wait; }; 其中wait就是一个等待队列头的建立。 定义方法:struct completion myWait; 可使用空定义定义:DECLARE_COMPLETI...
2015-11-05 - 当Window下的服务部署到Linux的时候,我们一般用Mono.service 来启动停止。参数比较多,不太好用。于是有个这个Shell脚本。 用法:moa s1 start #启动 moa s1 stop # 停止 要求有如下的目录结构: /opt/basepath/ s1/ sample1.exe #服务1,文件名称不限 s2/...
2015-11-04 - 用shell写一个简短的程序,实现1+2+...+100的功能。 方法一: #!/bin/bash sum=0 for i in {1..100} do let sum+=$i done echo $sum 方法二: #!/bin/bash sum=0 for i in {1..100..1} do let sum+=$i done echo $sum 方法三: #!/bin/bash sum=0 for ((i=1;...
2015-11-03 - 背景: 每日构建的东西,按日期放到不同的文件夹里。如今天的构建放到2015-06-01里,明天的就放到2015-06-02里,依次类推。时间久了,需要一个脚本删除N天前的文件夹。(本例中N=7,即删除一周前的构建)。 下面直接上代码,linux版: #! /bin/bash historyDir...
2015-11-02 - 提问:我想要知道Linux系统中内核内置的模块,以及每个模块有哪些参数。有什么方法可以得到内置模块和设备驱动的列表,以及它们的详细信息呢? 现代Linux内核正在随着时间变化而迅速增长,以支持大量的硬件、文件系统和网络功能。在此期间,可加载模块(load...
2015-11-01 - 前一段时间,我已经介绍过 Linux 上针对 C/C++ 语言的最好 IDE(http://xmodulo.com/good-ide-for-c-cpp-linux.html)。很显然 C 或 C++ 并不是现存的唯一的编程语言,是时间讨论某些更加特别的语言了。 假如你做过一些统计工作,很可能你已经见识过 R 语言...
2015-11-01 - [root@localhost test]# ls helloworld.c Makefile [root@localhost test]# make make -C /lib/modules/2.6.32-71.29.1.el6.i686/build M=/home/android/test modules make[1]: Entering directory `/usr/src/kernels/2.6.32-71.29.1.el6.i686 CC [M] /home/...
2015-11-01 - 首先我们要知道内核的makefile是根据配置文件,也就是kconfig来决定是否编译一个文件的。 如果没有配置内核编译它,就不会生成.o文件。 自然就不会打开这个模块了。 如下是Kconfig 文件部分 # Embebbed system I2C/SMBus host controller drivers obj-$(CONF...
2015-11-01 - 获取硬盘序列号的方法 找到指定硬盘的设备文件(如果是根目录的话,可以通过读取 /etc/mtab 文件获取),打开对应的设备文件。然后使用系统调用ioctl。 在这里 ioctl 的第二个参数为 HDIO_GET_IDENTITY (获得指定文件描述符的标志号) 第三个参数为 struct...
2015-11-01 - 源码如下: #include sys/socket.h #include sys/ioctl.h #include linux/if.h #include string.h #include stdio.h char *net_detect(char* net_name) { int skfd = 0; struct ifreq ifr; skfd = socket(AF_INET, SOCK_DGRAM, 0); if(skfd 0) { printf(%s:%...
2015-11-01 - /var/run/utmp 保存当前在本系统中的用户信息 /var/log/wtmp 保存登陆过本系统的用户信息 他们保存的信息是基于结构体 struct utmp 的(/usr/include/bits/utmp.h) utmp 结构体定义如下: struct utmp { short int ut_type; //登录类型 pid_t ut_pid; //log...
2015-10-31 - expect是一个用来实现自动交互功能的软件套件。使用它可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。expect则可以根据程序的提示模拟标准输入提供给程序需要的输入...
2015-10-31 - 错误提示如下: error while loading shared libraries: libjson.so.0: cannot open shared object file: No such file or directory 原因一般有两个,一个是操作系统中没有包含该共享库(lib*.so.* 文件)或者共享库版本不对。解决办法就是重新下载安装。 另...
2015-10-31 - 1.在你责怪别人之前,先检查自己的代码 先想一想自己的假设和其他人的假设。来自不同供应商的工具可能内置不同的假设,即便是相同的供应商对于不同的工具,其假设也可能不同。 当其他人正在报告一个你不能重复的问题的时候,去看看他们在做什么。他们可能会...
2015-10-31 - 实现如下: strongspan style=font-family:KaiTi_GB2312;font-size:24px;#includestdio.h #includestring.h /* str_find 被搜索的字符串 str_src 要查找的值 str_des 替换 str_find 中的值的值 */ int str_replace(char* str_find,char* str_src, char* str_...
2015-10-31 - 最近准备找工作复习一下基础知识,写了一个很简单的open函数。 #includesys/types.h #includesys/stat.h #includefcntl.h #includestdio.h int main(void) { int fd; fd = open(./test, O_RDONLY|O_CREAT); if (fd == -1) printf(文件打开错误); printf ( %d...
2015-10-31 - OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 要使用openssl,首先安装openssl库: apt-get install openssl libssl-dev libssl-doc libcurl4-openssl...
2015-10-30 - 1.安装C的帮助手册 如果你使用的Linux发行版, 默认没有安装C语言的库函数MAN手册, 使用下面的方法解决: # sudo apt-get install manpages # sudo apt-get install manpages-de # sudo apt-get install manpages-de-dev # sudo apt-get install manpages-dev...
2015-10-28 - 共享中断,意思是多个中断共享一个中断号,那么这就意味着,多个设备中断发生时,都会产生一个同样的中断信号。那么怎么在linux下进行检测和处理呢?同时需要注意哪些事项? 1、首先,注册共享中断时,request_irq()函数中的flags标志必须指定为IRQF_SHARED...
2015-10-28 - 今日在对公司的产品调试时,发现如果nandflash有坏块在cramfs文件系统分区,那么linux系统无法启动,提示如下信息: uncorrectable error : uncorrectable error : end_request: I/O error, dev mtdblock0, sector 512 Buffer I/O error on device mtdblock0...
2015-10-27 - daemon进程是后台守护进程,有时候也叫精灵进程(agent).linux 下server都是daemon进程。相信大部分开发人员都知道如何去写一个daemon进程。但是另一方面,大部分人不知道为什么要这么做,不少人是从某个地方copy一个函数,拿来主义。但是具体为什么这么实现...
2015-10-27 - 系统环境:CentOS 7 X64、JDK1.8 一:安装jsvc 下载 commons-daemon的源码包 http://apache.fayea.com//commons/daemon/source/commons-daemon-1.0.15-src.zip 解压之后 cd src/native/unix/ 执行: export CFLAGS=-m64 export LDFLAGS=-m64 注意:这2句代码...
2015-10-27 - 现在的职业选择是如此之繁多,很多人往往不知道自己要干什么工作。作为一个已经在软件行业淫浸差不多14年时间的资深人士,我发现web开发这个职业选择,渐渐成为了大众普遍的首...
2015-10-24 - 1、定义 Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。(该路径在默认路径之前查找) 移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录...
2015-10-24 - 1.安装git curl sudo apt-get install git-core curl 2.mkdir /bin PATH=~/bin:$PATH 3.$ curl https://storage.googleapis.com/git-repo-downloads/repo ~/bin/repo chmoda+x /bin/repo4. mkdir -p workspace/android/android4.4.2 $ cd workspace/android/...
2015-10-24 - 由于这学期要上操作系统课,老师说需要自己写程序在Linux上跑,并且由于与底层之类的东西相关,所以语言也必须要用C了,于是乎,一不做二不休,立马在ubuntu上开始编起C的程序来. 先是看了看书上介绍的一些编辑器,二话不说把Vim,Emacs,KWrite等编辑器先装了起来.(...