linux文件库函数_linux库函数 头文件 - CSDN
  • Linux库函数文件编程

    3.1打开文件

    3.1.1 函数名

    fopen

    3.1.2 函数原形

    FILE *fopen(const char *path, const char*mode) 

    //path 和 mode 都是字符串,因此要加双引号,例如:

    fopen(“/home/test.txt”, “w+”)

    3.1.3 函数功能

    打开文件

    3.1.4 所属头文件

    <stdio.h>

    3.1.5 返回值

    成功:返回文件指针  失败:返回0

    3.1.6 参数说明

    path:指定打开的文件名字(含路径)

    mode:文件打开模式 r r+ w w+ a a+

    w+:如果文件存在,则被清空,如果文件不存在,则创建新文件


     3.2关闭文件

    3.2.1 函数名

    fclose

    3.2.2 函数原形

    int fclose(FILE *fp )

    3.2.3 函数功能

    关闭文件

    3.2.4 所属头文件

    <stdio.h>

    3.2.5 返回值

    成功:0  失败:EOF

    3.2.6 参数说明

    fp:待关闭的文件的指针


    3.3读文件

    3.3.1 函数名

    fread

    3.3.2 函数原形

    size_t fread(void  *ptr,size_t  size, size_t  nmemb,FIFL  *stream)

    3.3.3 函数功能

    从文件中读取数据

    3.3.4 所属头文件

    <stdio.h>

    3.3.5 返回值

    成功:返回成功读取到的数据量  失败:返回0

    3.3.6 参数说明

    steram:待读取的文件

    ptr:指向读取出来后的数据的保存位置

    nmemb:读取的数据块数

    size:每块数据的大小

    每块大小为size字节,最后读取到的字节数为nmemb * size


    3.4写文件

    3.4.1 函数名

    fwrite

    3.4.2 函数原形

    size_t fwrite(constvoid *ptr,size_t size,size_t nmemb,FILE * stream)

    3.4.3 函数功能

    向指定的文件中写入数据

    3.4.4 所属头文件

    <stdio.h>

    3.4.5 返回值

    成功:返回成功写入的数据量  失败:0

    3.4.6 参数说明

    stream:要写入数据的文件指针

    ptr:存放要写入文件的数据

    nmemb:写入的数据块数

    size:每块数据的大小

    每块大小为size字节,最后读取到的字节数为nmemb * size


    3.5定位文件

    3.5.1 函数名

    fseek

    3.5.2 函数原形

    int fseek(FILE *stream, long offset, intwhence)

    3.5.3 函数功能

    设置文件内数据的位置指针

    3.5.4 所属头文件

    <stdio.h>

    3.5.5 返回值

    成功:返回0  失败:返回-1

    3.5.6 参数说明

    stream:待定位的文件指针

    offset:偏移量

    whence:起始位置

      SEEK_SET:起始位置为文件头

      SEEK_CUR:起始位置为当前位置

      SEEK_END:起始位置为文件末尾


    展开全文
  • w以只写的方式打开,且有截断功能(即文件打开后是一个新文件),若文件不存在就新建文件 a以只写的方式追加,若文件不存在就新建一个文件 (2)r+,w+,a+ 功能在上述的基础上,新增为可读可写,为上述功...

    知识点提炼:

    1. File 定义文件指针
    2. fopen(),
      第一个参数为文件路径
      第二个参数为文件的打开方式(r,w,a,r+,w+,a+)
      (1)r,w,a
      r为以只读的方式打开
      w以只写的方式打开,且有截断功能(即文件打开后是一个新文件),若文件不存在就新建文件
      a以只写的方式追加,若文件不存在就新建一个文件
      (2)r+,w+,a+
      功能在上述的基础上,新增为可读可写,为上述功能的增强版 
    3. fwrite()
      第一个参数为要写入文件的数据指针(如字数组名)
      第二个参数为数据的大小
      第三个参数为这个数据,输入次数
      第四个参数为文件指针
    4. fread()
      第一个参数为文件要输出的地址
      第二个参数该地址空间的大小
      第三个参数为有多少个size的数据大小
      第四个参数为输出的文件指针
      返回值为当前成
    5. fseek()
      第一参数为文件指针
      第二个参数为 偏移量
      第三个参数为将文件指针放置在何处
      (SEEK_SET),文件开头
      (SEEK_END),文件末尾
      (SEEK_CUR) ,  文件当前位置,(一般用来获取文件的大小)
      返回值为文件指针到开头的字节数
    6. fprintf()为格式化输出
      第一个参数即可以为文件指针,又可以是stdout标准输出
      printf()默认输出至stdout标准输出
      第二个参数是要输出的输出的变量

      以下为测试代码:
    7. #include <stdio.h>
      int main()
      {
              FILE *stream;//定义文件指针
              long len, curpos;
              stream=fopen("test.txt","w+");//以可读可写的方式打开文件,并且每次文件都是空的
              if(stream == NULL)
              {
                      printf("file not exist");
                      return -1;
              }
              fseek(stream,0L,SEEK_END);    //将文件指针移至文件尾部,使其可以变成追加的方式,即a+
              fwrite((char *)"hello!\n",sizeof("hello!\n"),1,stream);//将字符串写入,文件流中
              fprintf(stream,"create\n");//以数据流的方式输出至文件中,stderr
              fprintf(stdout,"create\n");//输出至标准输出
              if(stream==NULL)
              {
                      printf("file setup fail \n");//文件创建失败
                      return -1;
              }
              curpos = ftell(stream);//获取文件指针的位置
              //获取当前文件的长度
              fseek(stream,0L,SEEK_END);
              len=ftell(stream);
              fseek(stream,curpos,SEEK_SET);//将文件指针放置在文件的开头
              printf("the size of file is %ld \n",len);
              fclose(stream);
              return 0;
      }
      

      编译并测试:

      //编译
      gcc File_test.c  -o test
      //执行
      ./test
      
      

      输出:

      create
      the size of file is 15
      

       

     

    展开全文
  • linux库函数实现

    2019-05-10 16:04:52
    前言 C语言是一种结构化程序设计语言,当项目达到一定规模后,采用模块化设计是种必然的选择。所谓模块化设计是指对项目按照“自顶向下”的分析,将项目划分为一个个子系统,每个子系统再划分为多个模块,直到每一...

    前言 

    C语言是一种结构化程序设计语言,当项目达到一定规模后,采用模块化设计是种必然的选择。所谓模块化设计是指对项目按照“自顶向下”的分析,将项目划分为一个个子系统,每个子系统再划分为多个模块,直到每一模块足够小并且功能单一为止。再按照“自底向上”的方式进行程序设计,将模块用C语言函数来实现,形成逐层调用关系,最终构成整个项目。

    模块化设计可以降低程序复杂度,使程序设计、调试和维护等操作简单化。库函数是一种实现模块化的重要手段,在C语言编程中常见的通过包含头文件使用输入输出函数、数学函数等就属于库函数方式。函数库分为静态库和动态库两种,静态库是一系列的目标文件(.o文件)的归档文件(文件名格式为 libname.a),如果在编译某个程序时链接静态库,则链接器将会搜索静态库,从中提取出它所需要的目标文件并直接复制到该程序的可执行二进制文件(ELF格式文件)之中;动态库(文件名格式为 libname.so )在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入。

    静态库的实现

    以例子求分数和为例,原例中子函数 multi(m) 和主函数 main() 放在同一源文件中,先将其分成两个不同源文件 multi.c 和test.c。

    /*multi.c  这是一个求分数和的函数实现,单独在multi.c文件中,没有其他函数*/
    
    float multi(int m)
    {
        int i;
        float s = 0;
        for(i = 1;i <= m;i ++)
        {
            s = s + 1/i;
        }
        
        return s;
    }
    
    /*test.c  这是主文件,包含main函数,其中调用multi.c文件中的multi函数*/
    
    #include<stdio.h>
    float multi(int m);
    
    void main()
    {
        for(int i = 1;i <= 20;i++)
        {
            printf("m=%d,s=%f\n",i,multi(i));
        }
    }

    可以看到 test. c和 multi.c是调用与被调用关系,下面把 mult.c 编译成静态库。

    #gcc -c multi.c

    #ar r libmulti.a multi.o

    ar: creating libmulti.a

    第一行命令用gcc选项表示只编译不链接,因为 multi.c 是单一源文件,所以不需要链接,同时因为文件中没有 main() 函数,链接反而会报错。编译成功后,可以看见在文件夹中生成了 multi.o 文件。

    第二行命令是将 mult.o 文件压缩打包到库文件。库文件必须以 lib 开头,以 .a 为扩展名,除开头和扩展名之外的部分,将作为库文件的标识被使用。

    ar命令是Linux的一个备份压缩命令,用来做备存文件管理,可以创建、修改备存文件( archive),或从备存文件中抽取成员文件。备存文件以一定的结构打包一个或多个成员文件,且成员文件的内容、模式、时间戳等信息将被保存在备存文件中。

    创建成功后,可以看到在文件夹生成了 libmulti.a 文件。至此,由模块文件成功生成了静态库。下面来看,在主文件test.c中怎样使用生成的静态库。首先分析一下 test.c 源文件。在源文件的 main() 函数中使用了 multi 函数,而且在 main() 函数前通过 int multi(intm); 声明了 multi 函数的调用方式。但函数 multi 的函数体定义在 libmulti. a 中,编译时,通过静态方式将 libmulti.a 链接到 test 中,命今如下:

    # gcc -o test test.c -L. -l multi

    -L. 表示将当前路径加人到库查找路径,这是因为 libmulti.a 目前在当前路径的缘故。可以将静态库文件复制到系统默认的查找路径,这时就可以省略 L. 选项。

    -l multi 表示链接 libmulti.a 库文件,请留意文件名的对应。

    成功后即可生成 test 可执行程序文件,运行 test 即可看到运行效果。

     

    动态库的实现

    动态库是函数库的另外一种实现方式。静态库方式下可以看到,在由主文件 test.c 编译生成可执行程序阶段,main() 函数所需的 multi 函数模块一次性从 libmulti.a 中链接到了 test 。此后,生成的 test 可以独立使用,和 libmulti.a 再无关系。因此,静态库方式生成的可执行程序比较大

    以动态库方式提供的函数库,只有在使用它的程序执行时才被链接使用,而不将需要的函数模共在编前就链接到可执行文件中,一个动态库以被多个程序同时使用,故可称为共零库,相比静态库,使用动态库会使可执行程序更轻便,函数库升级更容易但部署相对比较困难,因为可执行程序需要和动态库一起才能使用。下面来看动态库方式下函数库的制作及使用过程。

    首先将 multi.c 文件制作成动态库:

    #gcc-fPIC-shared- c multi.c -o libmulti.so

    -fPIC 表示生成和位置无关的代码;-shared指示编译器生成动态库编译成功后,文件夹就会生成 libmulti.so文件,表明生成动态库完成。

    下面编译主函数文件,使用生成的动态库:

    gcc test.c -L. -l mulIiti -o test

    生成 test 后运行./test,即可看到输出结果。

     

    参考书

    清华大学出版社《嵌入式Linux程序设计》——田卫新

    展开全文
  • Linux应用程序学习之库函数方式文件编程  上一篇我学习的是linux系统调用函数的文件编程,这一篇我们就来说说linux库函数方式文件编程,那系统调用和库函数方式有什么区别吗?前面我们也讲过,系统调用函数是由...

    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库函数方式编程我们就说到这了。

     

       

    展开全文
  • Linux C 常用库函数手册(最新整理), chm文件 函数比较齐全,又方便查找。 适合学习linux下C编程者使用。
  • Linux C 最新库函数手册-强烈推荐,看到挺多下载不能用的,希望对有需要的人有帮助
  • 一个参数,文件指针 功能:获取当前文件指针到开头的字节数 其他知识点看参考上一篇 #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #define BUFFER_SIZE 50 int main(int argc,char **...
  • linux常用库函数

    2017-12-05 11:24:09
    1. setenv(), getenv() 可以用来做全局传参 首先要说明的是,通过此函数并不能添加或修改 shell 进程的环境变量,或者说通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。如果在某一次运行程序时...
  • Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。可以参考《Linux程序设计》(英文原版为《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章:...
  • GNU官方免费下载地址:ftp://ftp.gnu.org/gnu/glibc
  • linux下的c库函数大全

    2019-06-18 10:27:05
    linux下的c库函数大全,虽然没有函数描述,但是最起码可以知道分类,就可以去man了 Linux C函数库参考手册 第1章字符测试函数 isalnum(测试字符是否为英文字母或数字) isalpha(测试字符是否为英文字母) isascii...
  • Linux 库函数文件操作

    2016-09-06 16:17:08
    利用库函数操作文件具有跨平台的作用(库函数不随系统平台而变,即不管win还是Linux都适用),而利用Linux 系统调用操作文件,需要考虑平台的兼容性。 库函数 - 读文件 size_t fread(void *ptr, size_t size...
  • 流:上节课的 【Linux系统调用】文件编程 的操作方式为I/O文件操作,这是C提供的一种文件操作,它是通过直接存取文件来完成对文件的处理。  而今天的这课是流式文件操作,流是标准的c函数库里的一个抽象概念。当...
  • Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用...
  • 如果读到文件末尾返回EOF。 EOF其实就是一个宏:#define EOF (-1) 表示-1. 既然返回的是一个字节,为什么返回值确用4字节的int表示,不用unsigned char这1个字节类型表示,或直接用char类型表示? 原因就
  • linux 文件操作库函数

    2015-06-28 03:15:23
    fopen :打开文件 fread :读文件 fwrite : 写文件 fgetc : 读字符 fputc : 写字符 fscanf : 格式化读 fprintf : 格式化写 fseek : 文件偏移量定位 getcwd 、getwd、get_current_dir_name : 获取当前...
  • Linux文件的操作有两种方式文件IO函数(系统调用)和标准IO库函数调用。系统调用是最直接的方式,库函数调用最终也是通过系统调用实现的。可认为库函数调用是对系统调出于效率考虑而做出的优化。 二者区别: ...
  • 1. Linux系统调用,文件的描述符使用的是一个整数,库函数访问文件使用FILE类型的指针去指向描述文件; 2. 库函数不随系统平台而变,即不管win还是Linux都适用;   库函数 - 读文件 size_t fread(void *...
1 2 3 4 5 ... 20
收藏数 41,843
精华内容 16,737
关键字:

linux文件库函数