
Linux 基础
flymachine
这个作者很懒,什么都没留下…
展开
-
SigPipe信号
Linux平台开发过程中,遇到一个问题:服务方listen,海量客户端端连接上来,当客户端Ctrl+C时,服务方进程会退出,但没有core文件,百思不得其解。 尝试了很多努力,如在服务方代码中增加日志来跟踪,每次进程退出时日志输出位置不一定,无解。 后来打算用strace跟踪一下该进程,看看这个进程到底干什么了,一边跟踪一边测试,进程停止时,发现是接收到了SIGPI转载 2013-10-13 11:29:50 · 1077 阅读 · 0 评论 -
socket connect的问题
非阻塞Connect对于select时应注意问题对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后必须调用bind绑定到一个指定的地址,然后调用int listen(int sockfd, int backlog);进行监听。此时服务转载 2012-05-03 11:36:44 · 31007 阅读 · 1 评论 -
pthread_create后没有detach导致内存持续增长
昨天解决了一个隐蔽的内存泄漏问题,原因是pthread_create后的僵死线程没有释放导致的内存持续增长。现象是这样的:短时间内程序运行正常,但跑了12小时左右,用top查看其内存占用居然高达2G,于是马上意识到有内存泄漏。最先想到的是malloc/free、new/delete没有配对,申请的内存没有释放。于是写了个跟踪malloc/free调用的模块,不过检查中并没有找到未释放的转载 2012-05-03 12:06:13 · 2300 阅读 · 0 评论 -
linux计算时间
“时间”和“日期”的概念,主要有以下几个:Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来转载 2012-04-18 14:47:51 · 763 阅读 · 0 评论 -
/etc/ld.so.conf文件
Linux 共享库 Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。 第二类是动态链接的可执行程序。 静态可执行程序与动态可执行程序比较 我们可以用 ldd 命令来确定某一特定可执转载 2012-05-02 17:11:42 · 690 阅读 · 0 评论 -
busybox sendmail
busybox sendmail的用法如下:root@xs2008-desktop:/home/work/busybox/test_x86/busybox-1.15.3# cat mail.txt Subject: Hello, worldCC: xf_31@126.comTo: xf_31@126.comFrom: xf_31@126.comThis is原创 2012-04-14 17:15:45 · 3789 阅读 · 0 评论 -
linux route
1. 访问网段61.135.169.0 netmask 255.255.255.0的时候,走网关192.168.0.1, 设备用eth0~ # route add -net 61.135.169.0 netmask 255.255.255.0 gw 192.168.0.1 dev eth0~ # routeKernel IP routing tableDestinati原创 2012-04-26 11:04:40 · 2848 阅读 · 0 评论 -
linux 路由表维护
查看 Linux 内核路由表使用下面的 route 命令可以查看 Linux 内核路由表。# routeDestination Gateway Genmask Flags Metric Ref Use Iface192.168.0.0 * 255.255.255.0 U转载 2012-04-26 11:50:56 · 1291 阅读 · 0 评论 -
linux fgets
fgets (buf, size, fp)其行为方式如下:(1)遇到换行或文件结束EOF则返回。(2)按行读取。(3)每一行结束处的换行字符‘\n’也算该行字符。(4)对于大小为size的buf,最多只读取size-1个字符。(5)自动地把buf中最后一个字符(通常是换行符)的后面一个字节填充零结束符('\0')。因此如果想把buf中的换行符去掉,可以这样:buf[转载 2012-04-01 12:10:12 · 2534 阅读 · 0 评论 -
wildcard linux
1、wildcard : 扩展通配符2、notdir : 去除路径3、patsubst :替换通配符例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录$ mkdir test$ cd test$ mkdir sub在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件建立一个简单的Makefilesrc=$(w转载 2012-02-09 20:23:23 · 799 阅读 · 0 评论 -
解决SecureCRT中文显示乱码
操作步骤以下两步:远程linux机器。修改环境变量LANG。例如在~/.bash_profile里面添加[plain] view plaincopyexport LANG=zh_CN.UTF8 重新登录之后生效。现在查看一下当前设置:[plain] view plaincopy转载 2013-05-15 16:34:21 · 888 阅读 · 0 评论 -
JNI 入门介绍(jstring与char*的转换)
JNIEXPORT void JNICALL Java_command_Cmd_Command (JNIEnv * env, jobject o, jstring command) { char* t; t = (char*)env->GetStringUTFChars(command,0);转载 2013-05-24 14:00:28 · 1333 阅读 · 0 评论 -
什么时候mutex不够,还需要condition variable
什么时候mutex不够,还需要condition variable?假设有共享的资源sum,与之相关联的mutex 是lock_s.假设每个线程对sum的操作很简单的,与sum的状态无关,比如只是sum++.那么只用mutex足够了.程序员只要确保每个线程操作前,取得lock,然后sum++,再unlock即可.每个线程的代码将像这样add(){pthread_mu转载 2013-08-16 23:35:35 · 915 阅读 · 0 评论 -
Linux的锁和条件变量用法 | pthread_mutex_lock | pthread_cond_signal
本篇默认读者已经清楚多线程中的锁、互斥锁、条件变量基本概念及作用,本篇只讲怎么在C++里编程调用。互斥锁很简单,条件变量(多用于生产者-消费者模型)则细节较多,本文主要说它。主要涉及函数#includepthread.h>int pthread_mutex_lock(pthread_mutex_t *mptr); //互斥锁加锁int pthread_mutex_u转载 2013-08-16 23:36:17 · 1667 阅读 · 0 评论 -
pthread_cond_wait()函数的理解
pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t*mutex)函数传入的参数mutex用于保护条件,因为我们在调用pthread_cond_wait时,如果条件不成立我们就进入阻塞,但是进入阻塞这个期间,如果条件变量改变了的话,那我们就漏掉了这个条件。因为这个线程还没有放到等待队列上,所以调用pthread_cond_wait前转载 2013-08-15 22:08:44 · 906 阅读 · 0 评论 -
条件变量pthread_cond_t怎么用
最近看《UNIX环境高级编程》多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白[cpp] view plaincopy#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_IN转载 2013-08-15 22:07:29 · 821 阅读 · 0 评论 -
服务器进程为何通常fork()两次
前几天接到某互联网公司的电话面试,面试官问我两次fork()的作用,我一头雾水,说不知道。知识面还是太窄了。下面就总结下两次fork()的作用。 首先,要了解什么叫僵尸进程,什么叫孤儿进程,以及服务器进程运行所需要的一些条件。两次fork()就是为了解决这些相关的问题而出现的一种编程方法。 孤儿进程 孤儿进程是指父进程在子进程结束之前死亡(return转载 2013-08-14 23:42:27 · 1061 阅读 · 0 评论 -
GDB + CoreDump 调试记录
现在说下gdb+coredump的调试流程 在实机上先打开产生core文件的设置,ulimit -c unlimited ,这将使程序在遇到断错误的时候保留下当时的堆栈信息,而这个core文件的大小没有进行限制,当然,还可以更改core文件的产生路径,具体可以google下。 之后运行断错误程序,获取产生的core文件。 运用平台指定的gdb程序 调用arm转载 2013-08-20 22:46:04 · 2851 阅读 · 0 评论 -
AMR文件格式分析
目录1. 概述2. AMR编码方式3. AMR文件结构示范图4. AMR帧头格式分析5. 异常帧分析6. AMR帧读取算法7. 参考资料1. 概述现在很多智能手机都支持多媒体功能,特别是音频和视频播放功能,而AMR文件格式是手机端普遍支持的音频文件格式。 AMR,全称是:Adaptive Multi转载 2013-07-27 16:38:54 · 967 阅读 · 0 评论 -
Linux下JNI实现
Linux下JNI实现最近研究Android,涉及到JNI调用。虽然我对Java语言有所了解,但是还没有接触过JNI。今天在Unix Center的Ubuntu上面用JNI实现了“经典”的“Hello world”程序。通过这个简单的程序把JNI的一些小知识进行一下总结。什么是JNI JNI是Java native interface的简写,可以译作Java原生接口转载 2013-05-15 16:48:52 · 613 阅读 · 0 评论 -
ARM与X86架构对比区别
关键字:ARM架构 X86架构 工控主板 开发设计 Android(安卓)系统 LINUX WINCEGOOGLE的Android系统和苹果的IPAD、IPHONE推出后,ARM架构的电脑系统(特别是在终端方面应用)受到用户的广泛支持和追捧,ARM+Android成为IT、通信领域最热门的话题,众多芯片厂商纷纷推出具有各种独特应用功能基于ARM结构开发的产品,近期最新形成的“异构概念”更成转载 2013-05-15 10:48:01 · 1050 阅读 · 0 评论 -
批量编译目录下文件的Makefile
1.在存放.c文件的目录下编按如下方法编写Makefile文件: #Makefile start.. CC := gcc #根据需要添加其它如XX := g++ CFLAGS := -Wall -O -g #优化,输出调试信息,及所有警告 TARGET :=argcv test hello unixio getuid #要编译的目标名,文件名去后缀的 #下面开始一一编转载 2012-02-09 20:29:04 · 985 阅读 · 0 评论 -
Linux上的free命令详解
解释一下Linux上free命令的输出。 下面是free的运行结果,一共有4行。为了方便说明,我们加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:FO[2][1] = 999212FO[3][2] = 305404<!--Code highlighting produced by Actipro CodeHighligh转载 2012-02-02 11:51:17 · 560 阅读 · 0 评论 -
Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches频繁的文件访问会导致系统的Cache使用量大增$ free -mtotal used free shared buffers cachedMem: 3955 3926 28 0 55 3459-/+ buffers/cache: 411 3544Swap: 5726 0 5726转载 2012-02-02 11:58:14 · 894 阅读 · 0 评论 -
.linux内核commandline参数解析过程
linux内核commandline参数解析过程[转]linux内核相关 2009-04-16 17:00:38 阅读525 评论0 字号:大中小 订阅 最近研究了一下linux内核启动时ramdisk的加载过程,本来是用的是JIFFS文件系统因为调试的需要,现在要通过u-boot直接将内核镜像和ramdisk文件系统镜像下载到SRAM中,首先需要添加并修改转载 2011-11-04 00:18:53 · 4198 阅读 · 0 评论 -
Linux2.6 内核的 Initrd 机制解析
1.什么是 Initrdinitrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, boot loader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。在 boot loader 配置了 initrd 的转载 2011-11-03 23:54:47 · 451 阅读 · 0 评论 -
uboot启动zImage(go)和uImage(bootm)分析
我找了一块龙珠系列mx9328的板子和一个windriver ice,于是想把上面跑起来linux,不过内核启动遇到一些,调试了1个星期,有点收获,准备记录下来,先把之前不明白的zImage和uImage差异写出来。做个记号 1.之间差异。 bootm 加载linux镜像是加载uIamge,uIamge是由mkimage制作而来,和zIamge的差异是uIamge是zIamge压缩转载 2011-11-04 00:37:26 · 889 阅读 · 0 评论 -
解决u-boot 向kernel参数传递问题
文章说明:calmarrow(lqm)原创文章引自:http://piaoxiang.cublog.cnlufuchong对bootm引导内核做了详细的说明,原文见:http://www.cnitblog.com/luofuchong/archive/2007/01/12/21834.html。他分析的侧重点在bootm引导内核的基本原理和方法,但是在实际使用过程中,关转载 2011-11-04 00:15:38 · 2492 阅读 · 0 评论 -
U_boot 的 bootcmd 和bootargs参数详解
U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。u-bootcmd 前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。u-bootargs bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来转载 2011-11-04 00:35:52 · 511 阅读 · 0 评论 -
Linux 命令行参数分析
在实际程序之中我们经常要对命令行参数进行分析. 比如我们有一个程序a可以接受许多参数.一个可能的情况是 a -d print --option1 hello --option2 world 那么我们如何对这个命令的参数进行分析了?.经常用函数是getopt和getopt_long. #include #include int getopt(int argc,c原创 2011-11-24 09:39:36 · 675 阅读 · 0 评论 -
linux 如何对库和可执行文件进行裁减
如果生成的可执行文件或库比较大,这时候就可以使用strip命令进行裁减,在嵌入式开发中,如果使用的交叉编译工具是arm-linux,则命令 是arm-linux-strip,如果是arm-uclibc-linux,则命令是arm-uclibc-linux-strip. 因为开发板上的空间本来就很少,使用这个命令可以进一步减少可执行文件的大小,从而可以在开发板上可以存放更过的可执行文件。下转载 2011-11-22 21:31:06 · 2280 阅读 · 0 评论 -
/etc目录文件介绍
etc 是Linux下的配置文件的老家, 很多管理和使用的修改都在这里 3. 网络配置文件3.1 /etc/hosts#/etc/hosts#文件格式: IPaddress hostname aliases#文件功能: 提供主机名到IP地址的对应关系,建议将自己经常使用的主机# 加入此文件中,也可将没有DNS记录的机器加入到此文件中,# 这样会方便网络应用127.0转载 2011-11-21 11:15:02 · 3990 阅读 · 0 评论 -
ARM上的浮点运算 eabi oabi busybox (Kernel panic - not syncing: Attempted to kill init!)
这篇文章对最近遇到上的ARM上浮点运算的问题做一个总结。首先,我们先看一下ARM处理器是如何处理浮点运算的。交叉编译器在编译的时候,对于浮点运行会预设硬浮点运算FPA(Float Point Architecture),而没有FPA的CPU,比如SAMSUNG S3C2410/S3C2440,会使用FPE(Float Point Emulation 即软浮点),这样在速度上就会遇到极大的限转载 2011-11-16 20:30:42 · 1110 阅读 · 0 评论 -
BOOTPARAM
NAMEbootparam - Introduction to boot time parameters of the Linux kernel DESCRIPTIONThe Linux kernel accepts certain 'command-line options' or 'boot time parameters' at the moment it is start转载 2011-11-04 00:22:31 · 3859 阅读 · 0 评论 -
linux的passwd和shadow重要文件说明
l /etc/passwd# vim /etc/passwdroot:x:0:0:root:/root:/bin/bash....省略说明:每一行都代表一个账号。有很多账号是系统中必须要的,简称系统账号,例如bin,nobody 等。每一行使用:分隔开,共有七段,分别是:1, 账号名称。对应 UID 用的!2, 密码:早期的Unix 系统的密码是放在这个文件中,但因为这转载 2011-11-25 10:53:51 · 1220 阅读 · 0 评论 -
Linux 常用命令
1.tty - print the file name of the terminal connected to standard input2.批量替换文件中的字符串:sed -i "s/hello/DM/g" `grep hello -rl .` 3.如何判断CPU是否为64位?uname -agetconf LONG_BIT判断CPU是否支持64位:ca原创 2011-11-22 15:37:22 · 454 阅读 · 0 评论 -
linux udev认识
因为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了 /dev/sdb,我希望将设备文件固定下来。 过去,我总是对用户说,这个比较麻烦,因为/dev/sda等文件转载 2011-11-14 13:29:49 · 503 阅读 · 0 评论 -
Makefile and Example
1. 这个Makefile能把目录下的所有.c文件编译成.o文件--------------------------------------------------------------------------------------------------------CC=gccCFLAGS:=-Wall -O2SOURCE=$(wildcard *.c)OBJS=$(SO原创 2011-12-02 17:55:18 · 654 阅读 · 0 评论 -
Memory barrier
Memory barrier, also known as membar or memory fence or fence instruction, is a type of barrier and a class of instruction which causes a central processing unit (CPU) or compiler to enforce a转载 2011-11-05 14:50:12 · 781 阅读 · 0 评论 -
关于Memory barrier
内核中定义的内存屏障原语有: #define barrier() __asm__ __volatile__("": : :"memory") #define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2) #define rmb() alternative("lock; addl $0,0转载 2011-11-05 14:41:38 · 675 阅读 · 0 评论