易截截图软件、单文件、免安装、纯绿色、仅160KB

linux动态链接库的创建与使用

使用linux动态链接库:
     在Unix上存在两种库:动态库(.so)和静态库(.a),采用动态库(共享对象)技术可以方便程序间共享,节省程序占有空间,增加程序的可扩展性和灵活性。
    操作动态库的函数在dlfcn.h文件中定义,所以要在使用动态库时include <dlfcn.h>
   1. 打开动态链接库:dlopen,函数原型void *dlopen (const char *filename, int flag); dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。比如,void *pHandle = dlopen(strSoFilePath, RTLD_LAZY);
   2. 取动态对象地址:dlsym,函数原型为: void *dlsym(void *handle, char *symbol); dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的地址。注意使用这个函数不但获取函数地址,也可以获取变量地址。比如,假设我在so中定义了一个void mytest()函数,那在使用so时先申明一个函数指针:void (*pMytest)();然后使用dlsym函数将函数指针pMytest指向mytest函数,pMytest = (void (*)())dlsym(pHandle, "mytest");
   3. 关闭动态链接库:dlclose,函数原型为: int dlclose (void *handle); 该函数将该.so的引用计数减一,当引用计数为0时,将它从系统中卸载。
   4. 动态库错误函数:dlerror,函数原型为: const char *dlerror(void); 当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示没有错误信息。
   在取到函数执行地址后,就可以在动态库的使用程序里面根据动态库提供的函数接口声明调用动态库里面的函数。在编写调用动态库的程序的makefile文件时,需要加入编译选项-ldl。
创建linux动态链接库:
    从void *dlsym(void *handle, char *symbol); 的参数可以看出,该函数只传两个参数:一个指向so的handle和一个函数的symbol,所以so里面的函数应该不允许重载,否则根据一个symbol不能确定指向那个函数。为了兼容C和C++在so中定义函数时用extern "C",以下用例子说明如何创建linux动态链接库so文件。
//test.h
#ifdef __cplusplus
extern "C"
{
#endif
void mytest();
#ifdef __cplusplus
}
#endif
//test.c
#include <stdio.h>
#include "mytest.h"
void mytest()
{
 printf("mytest ok in .so file\n");
}
//main.cpp
#include <dlfcn.h>
#inclu


相关文档:

Linux内核设备模型(1)

Linux内核设备模型
翻译者:郭少悲
2009/12/01
原文:linux/Documentation/driver-model/overview.txt
概述
~~~~
Linux内核驱动模型是针对内核之前所有不同的驱动模型的统一抽象模型。它的目的是,通
过结合一套数据和操作集到一个全局可访问的数据结构里,从而添加基于某种指定总线的设
备和桥接驱动。
传统的驱动 ......

Linux内核设备模型(2)

翻译者:郭少悲
2009/12/01
原文:linux/Documentation/driver-model/binding.txt
驱动绑定
驱动绑定就是将一个设备和控制该设备的驱动关联在一切的过程。
典型的情况下,总线驱动来处理驱动绑定,因为每个总线驱动都有总线相关的数据
结构来表示设备和设备驱动。有了表示设备和设备驱动的通用数据结构,绝大多数的绑 ......

linux基础命令说明:chown改变文件所有者

具体为:sudo chown cjfh /CJFH1 将/CJFH1的属主更改为“cjfh”(我的用户名)
于是就可以对/CJFH1里的文件进行操作了。
完成之后,觉得自己对命令的熟悉程度不高,需进一步学习;
顺便将chown学了一下:
chown 命令
用途   更改与文件关联的所有者或组。
语法
chown [  -f ] [ -h ] [&nbs ......

使用Screen创建虚拟终端避免Linux远程断线

维护Linux的ssh工具在使用中,一旦遇到网络中断,则当前的shell就会自动关闭
当前的工作进度就会丢失,这对于远程升级等比较耗费时间的工作是非常不利的
对于远程调适代码也是很不可靠不安全的
为此,可以使用screen这个工具来解决这个问题。
对于最小化的linux,通常screen是不包含在系统内的。
需要查找操作系统的安 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号