Welcome 微信登录

首页 / 操作系统 / Linux

编程技巧分享

编程技巧分享

毕业在公司上班也有两年多了,从新手到现在,在开发中用了很多的技巧。一直都没整理过,今日就好好总结下:一.智能指针的使用c++使用new分配的内存,不会在使用结束后自动释放,需要使用delete删除。在一些逻辑复杂的代码段里面,分配了内存,但是很容易在退出时释放内存。在这样的情况下可以使用智能指针,它可以保证变量在退出作用域时释放内存。以下的代码段在推出作用域后mem所指向的内存块将会自动释放。{ char* mem = new char[32] ; ::s...
Linux内核学习之分段机制

Linux内核学习之分段机制

X86分段机制 这里讲的分段指的保护模式(protected mode)下的段机制。与保护模式相对的一个概念是实模式(real mode),实模式的地址由“段基址:偏移量”组成,段基址是个16位的寄存器(CS,DS等),这样显然限制了系统的寻址空间。保护模式的地址由“段选择子+偏移量组成”,段选择子(Segment Selector)仍然由16位寄存器(CS,DS等)指定,但是其意义也不再是段基址,而是指定了一个下标,用于从描述符表(X86把所有的段信息都...
Linux内核学习之内存地址

Linux内核学习之内存地址

在X86的Linux内核中共有三种地址:逻辑地址、线性地址和物理地址。逻辑地址,也就是常说的机器地址,用于在机器指令中指定操作数或者指令的地址,它由段(segment)地址和偏移(offet,or displacement)组成。线性地址,也就是著名的虚拟地址,在32位体系结构中它就是一个32位的数字,指定了在虚拟空间的位置。物理地址,它对应于物理意义上的内存所使用的地址,通常也是一个32位或者64位的数字。从逻辑地址到线性地址的转换是由分段单元(Segm...
Linux内核学习之分页机制

Linux内核学习之分页机制

什么叫“页”Linux内核分页实际上是对内存的一种分层分组的管理。分页机制在内存中建立页目录、页表这样的多级结构,这就是典型的分层管理。另一方面,一个页表中每个页表项都对应着一个物理页,也就说,一个页表管理着一组连续的虚拟地址的映射情况,这就是分组机制。地址映射过程相信这张经典的图就足以解释了。简单分析一下,在常见的二级页表映射过程中,页目录通过高31-22位索引,这里共10位,也就是1K个,而每个页目录项(PDE)的大小为4字节,总共大小就是1K*4B=...
Linux驱动开发之input子系统

Linux驱动开发之input子系统

本文对mousedev、Amimouse和input子系统进行分析,旨在提纲挈领,给出它们之间的调用关系(或者说关联)。阅读本文,需要与阅读Linux 2.6内核源码交叉进行,除非你是超人。背景:Amimouse,是指Amiga计算机的鼠标。“Amiga计算机为高分辨率,快速的图形响应,多媒体任务,特别是游戏方面做了专门设计。处理器是摩托罗拉的680x0系列处理器。是第一代具有真彩显示的计算机之一。自带Amiga操作系统。1985年在Commodore B...
Linux网络编程一步一步学-IPv6下网络编程步骤

Linux网络编程一步一步学-IPv6下网络编程步骤

大家都知道,随着互联网上主机数量的增多,现有的32位IP地址已经不够用了,所以推出了下一代IP地址IPv6,写网络程序的要稍微改变一下现有的网络程序适应IPv6网络是相当容易的事。对于我们来说就是IP地址变化了,所以程序里在用到IP地址的地方做相应的改变就可以了。记住:主要是改变程序里设置IP地址和端口等部分的代码。服务器端源代码如下:复制内容到剪贴板代码:#include <stdio.h>#include <stdlib.h>#...
Java基础:Java初学者必须了解的基础问题

Java基础:Java初学者必须了解的基础问题

对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。 这个语句...
C++异步编程方式

C++异步编程方式

“Boost是一个极致漂亮的设计”——这是我在这一段时间内学习使用这个C++准标准库时不断涌现在我脑海的想法。不过话说回来,即便这样,C++那浩如烟海的技巧以及模板那毁誉参半的语法依然还是让人头痛的事情。Boost中有说不完的漂亮设计,无论是对函数式编程方式的支持、还是异步IO的接口、正则表达式、字符串处理算法、容器,无一不是独具匠心。更不用说这个代码跨平台的兼容性很好了。感觉C++从来没有放弃其兼容并包的设计思想,“没有最好的,只有最合适的,C++提供你...
基于3c2410的Linux2.6.22移植

基于3c2410的Linux2.6.22移植

经历近2周的时间,查阅大量的参考资料和贴子,终于成功将Linux2.6.22移植到ARM2410上。中间走了不少弯路,不过走弯路也是一种收获,因为可以碰到和解决许多问题,增长知识。因为Linux版本问题以及开发平台的不同,网上的很多文章并不完全适合自己的板子,需要自己摸索和修改。写这点东西算是对前一阶段工作的总结,以免将来忘记。移植大体的步骤主要有:(1) 交叉编译环境的建立(我的主机系统是Ubuntu7.04);(2) 开发板(我用的是博创的2410)N...
Linux源代码已超过1000万行 价值达5亿美金

Linux源代码已超过1000万行 价值达5亿美金

10月23日消息,一项分析发现,在最近发布2.6.27版本Linux内核之后,包括Linux内核文件在内的源代码行数已经超过了1000万行。 不过,这个数字包括空白行、注释和整个内核源代码全年检查的文本文件。采用不同的方法进行计算,实际文本行数刚超过900万行。但是,我们喜欢更大的1000万行的数字,因为空白实际上对于代码的可读性是很重要的。 与所有的长期编程项目一样,Linux内核代码库的规模是不断变化的,因为老的代码需要取消和更换。不过,更新的功能将不...
Linux下USB驱动之skeleton分析

Linux下USB驱动之skeleton分析

Usb_skeleton.c,是USB驱动的框架,适合USB驱动的初学者。1.结构体内核其实就是一坨坨的数据结构,加上一根根链表。对于初学者,如果直接看USB驱动代码,大概会被那些名字相近的结构体弄得晕头转向,比如usb_host_interface和usb_interface,看着看着就把两个混淆了。所以,在学习USB驱动之前,建议把相关结构体都拎出来看一下,其实,也就那么几个结构体在那装神弄鬼。USB skeleton驱动中用到的主要字段已用蓝色标出:...
Linux键盘驱动范例

Linux键盘驱动范例

键盘在所有的驱动之中最为简单的一种,但它却包含了驱动的基本框架,对以后继续深入学习其他复杂的驱动大有裨益,以下便为你逐步剖析驱动的开发。采用的是查询方式。转载请注明出处:一.内核模块的注册和撤销在加载模块的时候,首先运行的是内核模块的注册函数。它的功能包括内核注册设备以及变量的初始化。static int head,tail;int _init Keypad_init(void){int result;result=register_chrdev(KEY_...
Fedora 8 环境 2.6内核编译步骤

Fedora 8 环境 2.6内核编译步骤

第一次编译2.6的内核,十分不顺手,老是有问题。(Fedora 8,内核2.6.25 )开始的时候我用的是2.6.26的内核在root目录下解压,在make menuconfig之后没有位子可以选择arm的,在网上查了后输入命令make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig,但这也有问题,因为你在menuconfig的选项都没有被保存下来,它还是要让你一个一个的慢慢的选择,这太麻烦了,想办法。在2.6.2...
给RedHat Linux安装GCC

给RedHat Linux安装GCC

突然发现原来自己虚拟机上的RedHat Liunux没有GCC编译工具。一时间不知道应该怎么办好。在网上查到只能下载rpm包。可是网上怎么都找不到,好不容易在管网上找到一个,发现太大了137M,网速却慢的可怜,估计一个月都下不下来。只好试着用安装盘,试图从光盘安装自己以前没有安装的程序。可是打开虚拟机,才发现虚拟机竟然不从光盘引导,而是直接进入了系统。我意识到是bios设置的问题,可是却不知道怎么进入bios,我傻傻的在vm菜单里面找bios设置,没有找到...
Linux GCC入门知识

Linux GCC入门知识

Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为 a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区...
Linux学习笔记之学习编程的步骤

Linux学习笔记之学习编程的步骤

这十多天来,安下心来,把Linux中C语言的编程的入门学习了一下。感觉到学习它进门容易,但是要进一步深入,还是有一定的难度!在这里我总结了学习C语言的入门学习步骤。其步骤如下:第一,熟练地掌握与使用vi这个编辑器。第二呢,你得熟悉Gcc这个编译器,当然是包括它的参数。这是学习的重中之重啊!第三,才是进入C语言的学习。至于GCC编译器参数的使用,做到真正的熟练的使用,得花上半个月的时间。...
Linux读书笔记之GCC编程相关知识

Linux读书笔记之GCC编程相关知识

编译静态库文件的命令为:ar cr *.a *.o *.o解释:*.a 这是你要编译的目标静态库文件,而*.o文件是已经编译了的文件。查看静态库文件中所包含的函数命令是:ar t /path/*.a解释:/path/是路径,而*.a是你所要查看的静态库文件。编译动态库文件第一种方法:第一步得到*.o文件,其命令为:gcc -c *.c,第二步得到动态库文件,其命令是:gcc -shared *.o -o *.so(*.c你编写的动态库文件的源代码文件,动态...
Linux读书笔记之学习写makefile文件

Linux读书笔记之学习写makefile文件

我花大约一个星期的时间去学习写makefile文件,从开始学习又学习,写了又写,虽然大都以失败结束,但是在最后,却以成功一次开始之后,大部分都是以成功结束。我觉得学习makefile文件,只要记住以下几条就行了。第一,明白各个文件的相互关系。即主程序与个函数主次关系,即书上所谓的依赖关系,说白了,要明白程序之间前因后果。第二,让隐晦规则见鬼去吧。第三,在Makefile文件中的命令那一行必须要以Tab键开始。第四,试着在Makefile文件中加入shell...
<< 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 >>