Linux学习之库函数方式文件编程

来源:互联网 发布:amazon it 编辑:程序博客网 时间:2024/05/18 21:43

Linux应用程序学习之库函数方式文件编程

        上一篇我学习的是linux系统调用函数的文件编程,这一篇我们就来说说linux库函数方式文件编程,那系统调用和库函数方式有什么区别吗?前面我们也讲过,系统调用函数是由liunx内核提供的,存在于内核中,而我们的库函数是由外部链接库来提供的,它是基于C函数库独立于操作系统平台的,无论在linux或者windows下,我们都可以使用这些函数,因此采用库函数编程设计可提高程序的可移植性。

在进行linux库函数文件编程我们首选要了解“流”和“文件指针”这一个概念,对于标准的C函数库,它们的操作都是围绕流来进行的,当程序需要读取数据时,就会开启一个通向数据源的流,这个数据源可以是文件,内存或者网络连接。当程序需要写入数据的时候,也会类似开启一个通向目的地的流,总之,数据的读取和写入就像数据在两边流动一样,所以称之为流,如下图形象表明:


 

在前面我们学习系统调用方式来实现文件编程时,我们使用一个文件描述符来表示一个文件,而在库函数方式的文件访问中,我们使用文件指针来指向我们要操作的文件,也就是使用FILE类型来表示一个打开的文件,这个类型中包含了管理文件流的信息。下面我们就来学习一下相关文件编程的C库函数。

与文件编程有关的C库函数我们主要介绍下面五个函数

(1)    打开文件函数:fopen

(2)    关闭文件函数:fclose

(3)    读取文件函数:fread

(4)    写入文件函数:fwrite

(5)    定位文件函数:fseek

有了上一篇的函数学习方法,我们应该很容易去找到相关函数的资料信息了,就是在linux中使用我们的man命令了,具体用法可以参看上一篇。下面我们就来写一个示例程序来了解下这些函数的用法,我会在程序中写上必要的注释。程序如下:



#include <stdio.h>


void main()
{
    FILE *fp;
    FILE *fc;        //定义两个文件指针,
    char buf[10];    //定义一个缓冲数组
    
    //下面就是打开我们的两个文件了,具体参数含义可以在linux man命令查看 
    fp = fopen("/home/share/fun_call/fopen/haha.txt" , "r+");
    fc = fopen("/home/share/fun_call/fopen/copy.txt" , "w+");
    
    
    fread(buf , 1 , 8 , fp);     //读取fp文件指针所指文件中八个字节,我们在该文件中写入1234567890 
    buf[8] = '\0';               
    
    fwrite(buf , 1 , 8  , fc);   //将读取的字节写入fc所指向的文件中
    fseek(fc , 10 , SEEK_SET);   //利用定位函数定位到fc文件中的十字节后面
    fwrite(buf , 1 , 8  , fc);   //再次向其中写入数据
    
    
    printf("the buf is %s \n" , buf); //打印我们的buf
    fclose(fp);
    fclose(fc);
}


下图即为我们程序运行的结果,有关linux库函数方式编程我们就说到这了。

 

   

0 0