摘要:
Java类型和本地类型对应 在如下情况下,需 要在本地方法中应用java对象的引用,就会用到类型之间的转换: 1)java方法里面将参数传入本地方法; 2)在本地方法里面创建java对象; 3)在本地方法里面return结果给java程序。 分为如下两种情况: Java原始类型 像 booleans、integers、floats等从Java程序中传到本地方法中的原始类型可以直接使用,下面是java中的原始类型和本地方法中的 类型的对应: Java类型 本地类型 字节(bit) boolean jboolean 8, unsigned byte jb... 阅读全文
摘要:
http://armboard.taobao.com/Android提供了用户级轻量的LOG机制,它的实现贯穿了Java,JNI,本地c/c++实现以及LINUX内核驱动等Android的各个层次,而且足够简单清晰,是一个相当不错的解读案例。本系列文章针对LOG机制的内部实现机理进行解读,本文是系列的第一篇,解读LOG机制的实现架构。(1)LOG的实现架构LOG的运行环境 下图是Android官方网站上给出的Android的Debug环境。 Android的LOG机制当然也在这个环境中运行。我们重点关注Emulator和Device上运行的部分,App VMs产生LOG信息,并与ADB Dev 阅读全文
摘要:
open("/dev/null",..)很多程序在一开始的时候要做这样的处理/** make sure we have stdin/stdout/stderr reserved*/while((t = open("/dev/null",O_RDWR)) < 3 && T >= 0)if(t >= 3) close(t)写入/dev/null的东西会被系统丢掉就像注释写的那样,对stdin/stdout/stderr进行保护代码中利用while先把文件描述符0,1,2分配出去,以后再分配的时候就不会将stdin/stdou 阅读全文
摘要:
线程创建1.1 线程与进程相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。1.2 创建线程POSIX通过pthread_create()函数创建线程,API定义如下:int pthread_create(pthread_t * thread, pthread_attr_t * attr... 阅读全文
摘要:
如何将stdin、stdout、stderr重定向到/dev/nullQ:我使用了如下代码将stdin、stdout、stderr重定向到/dev/nullfreopen("/dev/null","w",stdout);freopen("/dev/null","w",stderr);freopen("/dev/null","r",stdin);这样做正确吗,是否使用"w+"或者"a"更正确一些。在很多代码中是这样完成重定向的:close 阅读全文
摘要:
如何分析命令行参数Sun, 2006-07-16 01:27 — MarchdayGNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符。比如有一个命令:$ myprog -a vv --add -b --file a.txt b.txt - -- -e c.txt在GNU/Linux系统,对这种情况的一种合理解释是:a是短选项,带一个参数vv;add是长选项,无参数;b是短选项,无参数;file是长选项,带一个参数a.txt;b.txt是参数;-是参数,通常表示标准输入,stdin;--是一个指示符, 阅读全文
摘要:
下面的说明摘自于最新的Linux内核2.6.29,说明了strtok()这个函数已经不再使用,由速度更快的strsep()代替/** linux/lib/string.c** Copyright (C) 1991, 1992 Linus Torvalds*//** stupid library routines.. The optimized versions should generally be found* as inline code in <asm-xx/string.h>** These are buggy as well..** * Fri Jun 25 1999, 阅读全文
摘要:
正如"打工皇帝"唐骏说:"我觉得有两种人不要跟别人争利益和价值回报。第一种人就是刚刚进入企业的人,头5年千万不要说你能不能多给我一点儿工资,最重要的是能在企业里学到什么,对发展是不是有利……" 人总是从平坦中获得的教益少,从磨难中获得的教益多;从平坦中获得的教益浅,从磨难中获得的教益深。一个人在年轻时经历磨难,如能正确视之,冲出黑暗,那就是一个值得敬慕的人。最要紧的是先练好内功,毕业后这5年就是练内功的最佳时期,练好内功,才有可能在未来攀得更高。 出路在哪里?出路在于思路! 其实,没有钱、没有经验、没有阅历、没有社会关系,这些都不可怕。没有钱,可以通过辛 阅读全文
摘要:
生梨润肺化痰好, 苹果止泻营养高。 黄瓜减肥有成效, 抑制癌症猕猴桃。 番茄补血助容颜, 莲藕除烦解酒妙。 橘子理气好化痰, 韭菜补肾暖膝腰。 萝卜消食除胀气, 芹菜能治血压高。 白菜利尿排毒素, 菜花常吃癌症少。 冬瓜消肿有利尿, 绿豆解毒疗效高。 木耳搞癌散血淤, 山药益肾浮肿消。 海带含碘散淤结, 蘑菇抑制癌细胞。 胡椒驱寒兼除湿, 葱辣姜汤治感冒。 鱼虾猪蹄补乳汁, 猪肝羊肝明目好。 益肾强腰吃核桃, 健肾补脾吃红枣。 治高血压: (1)香蕉皮30克,晒干水煎喝,每日3次,一个月见效。 (2)用中药罗布麻,开水冲喝,每日15克,半月见效。 (3)银杏叶每日15克,用开水冲喝下,半月见效 阅读全文
摘要:
作者: 刘巍 我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。 几个误区 初学者对C#风潮. 阅读全文
摘要:
第一种,知识陈旧的人。如今,知识更新的速度越来越快,知识倍增的周期越来越短。20世纪60年代,知识倍增,周期是8年,70年代减少为6年,80年代缩短成3年,进入90年代以后,更是1年就增长1倍。人类真正进入了知识爆炸的时代,现有知识每年在以10%的速度更新。生活在这样一个时代,任何人都必须不断学习,更新知识,想靠学校学的知识“应付”一辈子,已完全不可能了。吴德贵说,过去,我们对“终身教育”的理解是,一个人从上学到退休,要一直接受教育;现在,这一概念应当重新定义,终身教育,从摇篮到坟墓,应贯穿人的一生。他认为,入世后,那些“抱残守缺”、知识陈旧的人,将是职场中的麻烦人。 第二种,技能单一的人。吴 阅读全文
摘要:
销售是一种以结果论英雄的游戏,销售就是要成交。没有成交,再好的销售过程也只能是风花雪夜。在销售员的心中,除了成交,别无选择。但是顾客总是那么“不够朋友”,经常“卖关子”,销售员唯有解开顾客“心中结”,才能实现成交。在这个过程中方法很重要,以下介绍排除客户疑义的几种成交法: 1、顾客说:我要考虑一下。 对策:时间就是金钱。机不可失,失不再来。 1)询问法: 通常在这种情况下,顾客对产品感兴趣,但可能是还没有弄清楚你的介绍(如:某一细节),或者有难言之隐(如:没有钱、没有决策权)不敢决策,再就是挺脱之词。所以要利用询问法将原因弄清楚,再对症下药,药到病除。如:先生,我刚才到底是哪里没有解释清楚,所 阅读全文
摘要:
蓝心导读:颜色心理学在我们生活中有很多微妙的应用,本文会为你娓娓道来:为什么快餐店不适合等人?为什么保险柜多为黑色?为什么冰箱多为白色?为什么蓝色汽车的事故率最高?为什么被子多为白色和淡蓝色?什么颜色让你容易入睡?什么颜色又能让你保持清醒?……——www.lansin.com 色彩具有不可思议的神奇魔力,会给人的感觉带来巨大的影响。例如,色彩可以使人的时间感发生混淆,这是它的众多魔力之一。人看着红色,会感觉时间比实际时间长,而看着蓝色则感觉时间比实际时间短。 请两个人做一个实验,让其中一人进入粉红色壁纸、深红色地毯的红色系房间,让另外一人进入蓝色壁纸、蓝色地毯的蓝色系房间。不给他们任何计时.. 阅读全文
摘要:
我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别想对那些初学JAVA/DOT。NET技术的朋友说点心里话,希望你们能从我们的体会中,多少受点启发(也许我说的不好,你不赞同但看在我真心的份上别扔砖头啊). 一。 在中国你千万不要因为学习技术就可以换来稳定的生活和高的薪水待遇,你千万更不要认为哪些从事 市场开发,跑腿的人,没有前途。 不知道你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需要团队的成员没日没夜的加.. 阅读全文
摘要:
6.3.1伙伴算法1.原理Linux的伙伴算法把所有的空闲页面分为10个块组,每组中块的大小是2的幂次方个页面,例如,第0组中块的大小都为20(1个页面),第1组中块的大小为都为21(2个页面),第9组中块的大小都为29(512个页面)。也就是说,每一组中块的大小是相同的,且这同样大小的块形成一个链表。我们通过一个简单的例子来说明该算法的工作原理。假设要求分配的块其大小为128个页面(由多个页面组成的块我们就叫做页面块)。该算法先在块大小为128个页面的链表中查找,看是否有这样一个空闲块。如果有,就直接分配;如果没有,该算法会查找下一个更大的块,具体地说,就是在块大小为256个页面的链表中查找 阅读全文
摘要:
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理下将虚拟地址空间映射到内存,供malloc函数使用。(参见linux内核情景分析)#include <unistd.h> int brk(void *end_data_segment); void *sbrk(p 阅读全文
摘要:
物理内存管理(页管理)Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[1],系统可以东一页、西一页的凑出所需要的内存供进程使用。虽然如此,但是实际上系统使用内存还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更改,因此能降低TLB的刷新率(频繁刷新会很大增加访问速度)。鉴于上述需求,内核分配物理页为了尽量减少不连续情况,采用了“伙伴”关系来管理空闲页框。伙伴关系分配算法大家不应陌生——几乎所有操作系统书都会提到 阅读全文
摘要:
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论市面上或是网上都充斥着大量涉及内存管理的教材和资料。因此我们这里所要写的Linux内存管理采取必重就轻的策略,从理论层面就不去板门弄斧,贻笑大方了。我们最想做的和可能做到的是以开发者的角度谈谈对内存管理的理解,最 阅读全文
摘要:
inux下的时间函数我们在编程中可能会经常用到时间,比如取得系统的时间(获取系统的年、月、日、时、分、秒,星期等),或者是隔一段时间去做某事,那么我们就用到一些时间函数。linux下存储时间常见的有两种存储方式,一个是从1970年到现在经过了多少秒,一个是用一个结构来分别存储年月日时分秒的。time_t 这种类型就是用来存储从1970年到现在经过了多少秒,要想更精确一点,可以用结构struct timeval,它精确到微妙。struct timeval{ long tv_sec; /*秒*/ long tv_usec; /*微秒*/};而直接存储年月日的是一个结构:struct tm{ int 阅读全文
摘要:
很久没看APUE,今天一位朋友问道关于一个mutex的问题,又翻到了以前讨论过的东西,为了不让自己忘记,把曾经的东西总结一下。先大体看下网上很多地方都有的关于pthread_cond_wait()的说明:条件变量 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。 1. 创建和注销 条件变量和互斥锁一样,都有静态动态两种创建方式,静态方式使用PTHREAD_COND_INITIALIZER常 阅读全文
摘要:
Ubuntu 默认采用UTF8编码,可以方便global。但对中文支持,还不细致,即便默认采用中文安装,也并不会自动添加GB*等支持,致使在Ubuntu下访问部分Win文本文件时,出现乱码。I. 配置系统环境执行 sudo vi /var/lib/locales/supported.d/zh加入以下配置参数zh_CN.GB18030 GB18030 (最新汉字编码字符集,向下兼容GBK,GB2312)zh_CN.GBK GBK (汉字扩展编码,向下兼容GB2312, 并包含BIG5全部汉字)zh_CN.GB2312 GB2312 (简化汉字编码字符集, 最近有客户要我们改进GB2312,太看得 阅读全文
摘要:
1、使用命令:fdisk -l,查看系统硬盘和分区情况2、插入优盘,再次用fdisk -l命令查看 大家可以发现多了一个硬盘/dev/sdb和它的一个分区/dev/sdb13、使用命令:mkdir -p /mnt/usb,在mnt目录下创建目录usb来作挂接点4、进行挂载,使用命令:mount -o iocharset=cp936 /dev/sdb1 /mnt/usb 其中,-o iocharset是设定字符集,保证能够正常显示中文5、已成功挂载,可以使用命令:ls /mnt/usb进行查看。挂载移动硬盘和优盘完全一样6、解除挂载,目的是避免损坏或丢失数据,使用命令:umount /dev/s 阅读全文
摘要:
linux2.6.20 sd/mmc卡驱动学习日记1(基于s3c2440) 首先,我们来看Makefile文件吧,Makefile中文件的目标文件的顺序是很重要的,因为这个会涉及到模块的依赖关系,比如说,如果这些源文件中有module_init(),则这些module_init就按在Makefile中的顺序链接进内核,之后也按照链接的顺序进行调用。根据我们的内核配置选项,将要编译进内核的文件就只有mmc.c,mmc_sysfs.c,mmc_block.c,mmc_queue.c,s3cmci.c这几个文件。其中mmc.c与mmc_queue.c主要是定义了一些其他文件中将要使用的函数,我们暂时 阅读全文
摘要:
1 线程取消的定义一般情况下,线程在其主体函数退出的时候会自动终止,但同时也可以因为接收到另一个线程发来的终止(取消)请求而强制终止。2 线程取消的语义1. 线程取消的方法是向目标线程发Cancel信号,但如何处理Cancel信号则由目标线程自己决定,或者忽略(当禁止取消时)、或者立即终止(当在取消点或异步模式下)、或者继续运行至Cancelation-point(取消点,下面将描述),总之由不同的Cancelation状态决定。2. 线程接收到CANCEL信号的缺省处理(即pthread_create()创建线程的缺省状态)是继续运行至取消点再处理(退出),或在异步方式下直接退出。一个线程处 阅读全文
摘要:
linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86可以有4种模式RING0~RING3 RING0特权模式给LINUX内核空间RING3给用户空间linux内核是如何组成的?答:linux内核由SCI(System Call Interface)系统调用接口、PM(Process Management)进程管理、MM(Memory Management)内存管理、Arch、VFS(Virtual File Systerm)虚拟文件系统、NS(Ne 阅读全文
摘要:
Linux 3.0正式发布(7月21日)已经过去3~4天了,不见国人有什么反响,四处似乎很安静。何故哉? 去年这个时候,Linux打假;今年这个时候,Office打架,使人很心烦。如今这个时候,有谁还拿Linux来说事儿?近日,科研经费陷“无底黑洞”一文,似乎又唤起了人们的良知,看问题的视角变了。 记得,2003年11月18日,我正好在厦门软件园,Linux 2.6正式发布了。可以公正地说,一切现代的GNU/Linux成就是从个版本开始的。从此,Linux 2.6.1;Linux 2.6.2;Linux 2.6.3... ...直到Linux 2.6.39相继发布。实际上,Linux 3.0. 阅读全文
摘要:
上周五,Linus Torvalds终于发布了备受瞩目的新一代Linux操作系统内核。Linux Kernel 3.0经过了七个RC候选版才推出正式版本,上一个版本是5月19日的2.6.39,也是2.6系列的第39次升级维护。八年来,Linux开发人员一直致力于2.6版本的改进工作,新版本提升到3.0是为了纪念Linux风雨走过的20年,同时也精简了越来越复杂的版本号。上周五,Linus Torvalds终于发布了备受瞩目的新一代Linux操作系统内核。Linux Kernel 3.0的发布,代表着Linux开源新时代的到来。之前曾有消息称,Linus Torvalds在其Google+帖子中 阅读全文
摘要:
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!如果不扯得太远的话(比如说操作系统中虚拟内存和物理内存如何运做如何管理之类的知识等),我感觉这篇文章应该是比较全面地谈了一下malloc()和free().这篇文章由浅入深(不见得有多深)分三个部分介绍主要内容。废 阅读全文
摘要:
一、一定要养成一个规范标准的代码排版格式,好的排版会让帮助你的人事半功倍。二、一定要培养自己查找错误的能力,要记住别人只帮你一时。三、一定要养成写注释的习惯,特别是你的代码要给别人看时。四、遇到问题,一定不要立刻问别人,其实很多问题都是自己不小心所致,回头看看书你可能会明白原来这也很简单。五、多看看头文件中的内容,它能告诉你标准地调用库函数的方法。六、书上的程序其实都是比较经典的,何不在上机运行一下这些程序,看看你对程序的理解力是怎么样的。七、优秀的程序员不只对书本上的知识了解很透澈,而且对更深层次的知识有着强烈地吸引力。八、一定要跟上世界的脚步,闭门造车会导致你失败的很重要的原因。九、一定要 阅读全文
摘要:
我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。 例如我要在一段代码中多次交换两个变量的值,我可以在代码中多次写入i=x;x=y;y=i; 不过这样未免有点麻烦我们可以编写一个change_two_int()函数进行简化。定义如下函数:void change_two_int(int *a,int *b) { int c; c=*a; *a=*b; *b=c; } 这样每次要进行交换时只需 阅读全文