Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

NULL指针、零指针、野指针

NULL指针、零指针、野指针

1. 空指针、NULL指针、零指针1.1什么是空指针常量0、0L、""、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一般的 C 系统选择 (void*)0 或者 0 ...
C++ 析构函数&虚析构函数

C++ 析构函数&虚析构函数

1.为什么要定义虚析构函数?如果有一个带有虚函数功能的类,则它需要一个虚析构函数,原因如下:1)如果一个类有虚函数功能,它经常作为一个基类使用;2)如果它是一个基类,它的派生类经常使用new来分配;3)如果一个派生类对象使用new来分配,并且通过一个指向它的基类的指针来控制,那么它经常通过一个指向它的基类的指针来删除它(如果基类没有虚析构函数,结果将是不确定的,实际发生时,派生类的析构函数永远不会被调用);基类有虚析构函数的话,最底层的派生类的析构函数最先...
对Java中传值调用的理解

对Java中传值调用的理解

今天写这篇博文的原因是因为昨天晚上和同学就Java函数中传参方式讨论了一下,因为大家都是大学毕业之后就再也没有用过Java,所以还是有很多东西没有深入了解,也借此给自己补一下这方面的空缺。Java以引用的方式操作对象实例可以确认的是Java中操作对象的方式是以引用的方式操作对象。为了更深刻的了解这点我写了如下代码:首先定义一个自定义类型public class Person {String name;Person(String name){ this.na...
ARM-Linux汇编语法及它和ADS汇编转换的问题

ARM-Linux汇编语法及它和ADS汇编转换的问题

第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范。一. Linux汇编行结构任何汇编行都是如下结构:[:] [} @ comment[:] [} @ 注释Linux ARM 汇编中,...
C语言字节对齐

C语言字节对齐

文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如...
Linux协议栈查找算法优化随想

Linux协议栈查找算法优化随想

Linux的网络协议栈实现可谓精确却不失精巧,不必说Netfilter,单单说TC就够了,但是有几处硬伤,本文做一个不完备的记录,就当是随笔,不必当真。0.查找的种类Linux协议栈作为一个纯软件实现,保留了硬件接口,但是本文不涉及硬件。在Linux的协议栈实现中,由于没有硬件电路的固化,查找算法是难免的,比如路由查找,邻居查找,conntrack查找,socket查找,不一而足。事实上,协议栈作为一个公共组织,为所有的数据包服务,如果一个数据包到达协议栈...
Linux环境编程:获取网卡的实时网速

Linux环境编程:获取网卡的实时网速

在Windows下面,我们可以看到360或者是qq安全卫士的“安全球”,上面显示实时的网速情况。那么在Linux里面如何获取网卡的实时网速?其实原理很简单,读取需要获取网速的网卡在某段时间dT内流量的变化dL,那么实时网速就出来了,Speed = dL / dt。Linux在ifaddrs.h中提供了函数:/* Create a linked list of `struct ifaddrs" structures, one for ...
Linux编译curl库的动态库so

Linux编译curl库的动态库so

curl库是一个很强大的http开源库,c++里面能够很方便的和http服务器交互。最近项目开始内测,开始接登录和充值的SDK,选择了使用curl库来和第三方http服务器交互。在Windows下还是很容易使用,如何使用的案例比比皆是,而且很容易就找到已经编译好的动态库进行测试,但是最后在Linux下部署的时候,发现不好找已经编译好的so库文件,最后没办法只好自理更生。下载了源码下来看,配置文件看得一塌糊涂,在网上查了一些资料,也很少找到有用的信息,最后结...
Linux下在C语言中获取硬盘大小

Linux下在C语言中获取硬盘大小

由于系统中没有现成的代码可以直接获取某个硬盘的大小,此时可以借助popen,sscanf,fdisk命令共同完成硬盘大小的获取。工件原理如下,在Linux中执行fdisk -l命令,获取硬盘的详细信息,然后在C程序中通过popen将信息获取,然后用sscanf将相关信息进行处理,得到硬盘的大小。代码如下:int get_system_tf_capacity(double *capacity){if (capacity == NULL) return -1;...
Linux下串口通信编程

Linux下串口通信编程

由于串口通信需要自己写代码进行测试,同时要轮询测试各波特率是否工作正常。按照网上的代码,Linux下运行后总是或多或少有一些问题,后来借鉴APUE中关于tty_raw代码部分进行修改,终于可以正常运行,通信不丢数,不修改数据。同时在测试数据位为5,6时发现结果不正确,然后与其它同事了解后,发现串口下数据位5bit代表只会发送一个字节5bit。而不会自己进行拆分然后重组,得到原来的数据。例如,发送0xff,数据位5时,收到0x1f,数据位6时,收到0x3f,...
Linux文件锁flock,检查程序是否已经运行

Linux文件锁flock,检查程序是否已经运行

在多个进程同时操作同一份文件的过程中,很容易导致文件中的数据混乱,需要锁操作来保证数据的完整性,这里介绍的针对文件的锁,称之为“文件锁”-flock。flock,建议性锁,不具备强制性。一个进程使用flock将文件锁住,另一个进程可以直接操作正在被锁的文件,修改文件中的数据,原因在于flock只是用于检测文件是否被加锁,针对文件已经被加锁,另一个进程写入数据的情况,内核不会阻止这个进程的写入操作,也就是建议性锁的内核处理策略。Lin...
GCC选项_-Wl,-soname

GCC选项_-Wl,-soname

-Wl选项告诉编译器将后面的参数传递给链接器。-soname则指定了动态库的soname(简单共享名,Short for shared object name)soname的关键功能是它提供了兼容性的标准:当要升级系统中的一个库时,并且新库的soname和老库的soname一样,用旧库链接生成的程序使用新库依然能正常运行。这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。在Linux中,应用程序通过使用soname,来指定所希望库的版...
Android手机tcpdump抓包

Android手机tcpdump抓包

最近一直在开发基于微信公众帐号的应用,在开发过程中遇到问题时,无法非常方便的获取到数据包,导致分析解决问题比较麻烦。这里介绍如何在Android手机上实现tcpdump抓包。1、root机器在用tcpdump抓包过程中,需要使用到root权限。当前可以进行root的方法有很多,个人推荐http://root.baidu.com/,安装使用挺方便的。2、准备adb工具ADB是Android手机开发包中自带的Bug调试工具,使用这个工具可以非常方便的通过PC对...
JavaScript文档加载顺序和事件绑定

JavaScript文档加载顺序和事件绑定

为了保证网页代码层次清晰,便于管理,一般HTML中只体现网页结构,具体的行为处理通过JS实现,样式则通过CSS文件管理。在以上原则下通过JS实现行为时,一定要注意文档加载过程中,执行JS代码的时机。页面加载过程有两个事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页 面包含图片等文件在内的所有元素都加载完成。(可以说:ready 在onload 前加载。)(1) 一些待调用函数定义,要在调用前定义。(2)...
基于Linux C的socket抓包程序和Package分析

基于Linux C的socket抓包程序和Package分析

测试运行平台:CentOS 6.5发行版,内核版本3.111. Linux抓包源程序在OSI七层模型中,网卡工作在物理层和数据链路层的MAC子层。进行网络通信时,源主机通过socket(或其它)应用程序产生IP报文,经过各个OSI层层封装,数据包以Ethernet帧的形式进入物理层。Ethernet帧包含源主机地址、IP报文、目标地址(IP地址、端口号或映射的6字节MAC地址)和需要传送到目标主机的其它信息。目标的MAC地址是哪里来的呢?这牵扯到一个ARP...
<< 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 >>