运行时(动态)加载

    动态库的加载涉及到4个API接口:打开动态库(dlopen)、查找符号(dlsym)、错误处理(dlerror)以及关闭动态库(dlclose),程序可以通过这几个API对动态库进行操作。 1.dlopen()     dlopen()函数用来打开一个动态库,并将其加载到进程地址空间,...

2018-10-06 19:02:49

阅读数 46

评论数 0

弱符号与强符号(弱引用与强引用)

弱符号与强符号     我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。这种符号的定义可以被称为 强符号(Strong Symbol)。有些符号的定义可以被称为 弱符号(W eak Symbol)。对于C...

2018-10-06 17:19:16

阅读数 259

评论数 0

进程间通信之Posix 信号量

概述     信号量(semaphore)是一种用于提供不同进程间或者一个给定进程的不同线程间同步手段的原语。     本文讨论:     1.Posix 有名信号量:使用Posix IPC 名字标识,可用于进程或线程间的同步。     2.Posix 基于内存的信号量:存放在共享内存区中,可用于...

2017-06-29 00:55:34

阅读数 303

评论数 0

eventfd 函数使用介绍

从Linux 2.6.27版本开始,新增了不少系统调用,其中包括eventfd,它的主要是用于进程或者线程间的通信(如通知/等待机制的实现)。 函数原型:       #include /* * function: 创建eventfd * @initval: 信号量的初始值 * ...

2017-06-24 00:08:00

阅读数 290

评论数 0

epoll 机制介绍

epoll - I/O event notification facility     在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。     相比于select,epoll最大的好处在于它不会随着监听fd...

2017-06-23 23:45:07

阅读数 159

评论数 0

linux进程调度浅析

操作系统要实现多进程,进程调度必不可少。 有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。   而进程调度究竟有多重要呢? 首先,我...

2016-10-01 00:36:46

阅读数 183

评论数 0

DNS 原理入门

重要  本文转自: http://www.ruanyifeng.com/blog/2016/06/dns.html DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。 本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,...

2016-06-20 00:24:18

阅读数 275

评论数 0

Linux 信号应用之黑匣子程序设计

重要 本文转载至:http://blog.jobbole.com/101619/ 1. 何为黑匣子程序及其必要性 飞机上面的黑匣子用于飞机失事后对事故的时候调查,同理,程序的黑匣子用于程序崩溃后对崩溃原因进程定位。其实Linux提供的core dump机制就是一种黑匣子...

2016-06-14 23:36:24

阅读数 1251

评论数 0

循环链表

循环链表介绍         循环链表是另一种形式的链表,它提供了更为灵活的遍历表元素的能力。循环链表可以是单向的或双向的,但区分一个链表是不是循环链表只要看它有没有尾部元素即可。在循环链表中,最后一个元素的next指针又指回头元素而不是设置为NULL。在双向循环链表中,头元素的prev指针则指向...

2016-04-27 23:15:44

阅读数 384

评论数 0

双向链表

双向链表介绍        双向链表,如同其名所暗示的那样,链表元素之间由两个指针链接。双向链表中的每一个元素都由3部分组成:除了数据域成员和next指针外,每个元素还包含一个指向其前驱元素的指针,称为prev指针。双向链表的组成是这样的:将一些元素链接在一起使得每个元素的next指针都指向其后...

2016-04-24 16:08:02

阅读数 2636

评论数 0

链式哈希表

链式哈希表介绍         待补充 链式哈希表实现 // Chtbl.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #i...

2016-04-15 00:03:51

阅读数 595

评论数 0

哈希表

哈希表支持一种最有效的检索方法:散列。从根本上来说,一个哈希表包含一个数组,通过特殊的索引值(键)来访问数组中的元素。哈希表的主要思想是通过一个哈希函数,在所有可能的键与槽位之间建立一张映射表。哈希函数每次接受一个键将返回与键相对应的哈希值。键的数据类型可能多种多样,但哈希值的类型只能是整型。 ...

2016-04-14 20:17:03

阅读数 251

评论数 0

单向链表

单链表介绍         单链表(通常简称链表)由各个元素之间通过一个指针彼此链接起来而组成。每个元素包含两部分:数据成员和一个称为next指针。通过采用这种二成员结构,将每个元素的next指针设置为指向其后面的元素。最后一个元素的next指针设置为NULL,简单地表示链表的尾端。链表开始处的元...

2016-04-14 20:06:06

阅读数 384

评论数 0

折半查找

折半查找的描述        折半查找是对一个有序数据集合所做的操作。查找开始时,首先找出有序集合中间的那个元素。如果此元素比要查找的元素大,就接着在较小的一个半区进行查找;反之,如果此元素比要查找的元素小,就在较大的一个半区进行查找。在每个更小的数据集中重复这个查找过程,直到找到要查找的元素或...

2016-03-28 23:54:12

阅读数 352

评论数 0

基数排序

基数排序的描述        基数排序是另外一种高效的线性排序算法。其方法是将数据按位分开,并从数据的最低有效位到最高有效位,依次排序,从而得到有序数据集合。例如:用基数排序对十进制数据{15,12,49,16, 36, 40}进行排序。在对各位数进行排序之后,其结果为{40,12,15, 16...

2016-03-28 23:08:30

阅读数 406

评论数 0

计数排序

计数排序的描述        计数排序是一种高效的线性排序,它通过计算一个集合中元素出现的次数来确定集合如何排列。不同于之前介绍的一些算法是基于比较的,计数排序不需要进行元素比较,而且它的运行效率要比效率我O(nlg n)比较排序高。        计数排序有一定的局限性。其中最大的局限就是它...

2016-03-27 23:53:46

阅读数 325

评论数 0

插入排序

插入排序的描述        我们假设对较小数组A[0...n-2]排序的问题已经解决了,我们得到了一个大小为n-1的有序数组:A[0] ≤...≤ A[n-2]。我们如何把这个较小规模的解和元素A[n-1]一同考虑,来得到原问题的解呢?显然,我们所需要做的就是在这些有序的元素中为A[n-1]找...

2016-03-22 23:37:16

阅读数 448

评论数 0

冒泡排序

冒泡排序描述        冒泡排序比较表中的相邻元素,如果它们是逆序的话就交换它们的位置。重复多次以后,最终,最大元素就“沉到”了列表的最后一个位置。第二遍操作将第二大的元素沉下去。这样一直做,知道n-1遍以后,该列表修排好序了。第 i 遍(0                          ...

2016-03-22 01:02:33

阅读数 285

评论数 0

选择排序

选择排序描述 选择排序开始的时候,扫描整个列表,找到它的最小元素然后和第一个元素交换,将最小元素放到它在有序表中的最终位置上。然后我们从第二个元素开始扫描列表,找到最后n-1个元素中的最小元素,再和第二个元素交换位置,把第二小的元素放到它在有序表中的最终位置上。一般来说,在对该列表做第 i 遍扫描...

2016-03-22 00:58:00

阅读数 286

评论数 0

合并排序

合并排序描述         合并排序本质上是将一个无序元素集分割成多个只包含一个元素的集,然后不断的将这些小的集合并,直到一个新的大有序数据集生成。例如:对于一个需要排序的数组A[0...n-1],合并排序把它一分为二:A[0...(n/2)-1]和A[(n/2)...n-1],并对每个子数组递...

2016-03-17 22:28:00

阅读数 300

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭