岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Linux频道 >> Linux编程 >> CC编程 >> Linux频道正文
C语言程序静态库和动态库的创建及其应用
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-12-18 18:13:53

在用c写程序时,很多时候需要存储一些简单的数据,如果为此而用mysql数据库就有些大才小用了,可以把这些数据以结构的形写入文件,然后再需要时读取文件,取出数据。

如下是定义函数的源文件和头文件:

源文件struct.c:

#include "struct.h"

//第一个参数是要写入的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,

第四个参数是打开文件流的形态,返回TRUE表示写入成功,返回FALSE表示写入失败

int writeStruct(const char *fileName,char *buffer,int bufferLen,char *mode){

    int ret;

    FILE *fileID = NULL;

    fileID = fopen(fileName,mode);

    if (fileID == NULL){

        perror("fopen");

        goto writeEnd;

    }

    rewind(fileID);

    ret = fwrite(buffer,bufferLen,1,fileID);

    if (ret <= 0){

        perror("fwrite");

        goto writeEnd;

    }

    if (fileID != NULL){

        fclose(fileID);

        fileID = NULL;

    }

    return TRUE;

writeEnd:

    if (fileID != NULL){

        fclose(fileID);

        fileID = NULL;

    }

    return FALSE;

}

//第一个参数是要读取的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,

第四个参数是打开文件流的形态,返回TRUE表示读取成功,返回FALSE表示读取失败

int readStruct(const char *fileName,char *buffer,int bufferLen,char *mode){

    int ret;

    FILE *fileID = NULL;

    fileID = fopen(fileName,mode);

    if (fileID == NULL){

        perror("fopen");

        goto readEnd;

    }

    rewind(fileID);

    memset(buffer,0,sizeof(buffer));

    ret = fread(buffer,bufferLen,1,fileID);

    if (ret >= 0){

        strcat(buffer,"\0");

    }else{

        perror("fread")    ;

        goto readEnd;

    }

    if (fileID != NULL){

        fclose(fileID);

        fileID = NULL;

    }

    return TRUE;

readEnd:

    if (fileID != NULL){

        fclose(fileID);

        fileID = NULL;

    }

    return FALSE;

      }

头文件struct.h:

#ifndef OWNSTRUCT_H_

#define OWNSTRUCT_H_

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define FALSE 0

#define TRUE 1

//第一个参数是要写入的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,

第四个参数是打开文件流的形态,返回TRUE表示写入成功,返回FALSE表示写入失败

int writeStruct(const char *fileName,char *buffer,int bufferLen,char *mode);

//第一个参数是要读取的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,

第四个参数是打开文件流的形态,返回TRUE表示读取成功,返回FALSE表示读取失败

int readStruct(const char *fileName,char *buffer,int bufferLen,char *mode);

      #endif

[1] [2] 下一页  

为了使用方便,可以把这两个函数接口定义为动态链接库或静态链接库。用动态链接库编译生成的可执行文件需调用.so文件方可正常运行,灵活但稍显麻烦;用静态链接库编译生成的可执行文件可直接运行,不用再调用如.so般的依赖库文件,简单但不灵活。

静态链接库:

1、编译生成目标文件

gcc -c struct.c

2、创建静态库

ar cqs libstruct.a struct.o (顺序不能乱)

3、链接静态链接库,生成可执行文件

gcc main.c -static -L. -ltest -o main

动态链接库:

1、编译成动态链接库

gcc st

[1] [2] 下一页


  • 上一个Linux频道:
  • 下一个Linux频道:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    天龙八部私服 传世私服 传奇世界私服 传奇私服 bet365 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365