现在的位置: 首页 > 综合 > 正文

《Linux程序设计第四版》第三章文件操作 读书笔记(四)

2019年07月18日 ⁄ 综合 ⁄ 共 2459字 ⁄ 字号 评论关闭

/** 标准IO库 */
在标准I/O库中,与底层的文件描述符对应的是流(stream),它被实现为指向结构FILE的指针。
标准IO库的库函数
(1)#include<stdio.h>
   FILE *fopen(const char *filename, const char *mode);
   
   mode描述了打开的方式(mode必须给定的是一个字符串,所以必须应该使用双引号)
       a)"r"或"rb":只读方式打开
       b)"w"或"wb":写方式打开,并把文件长度截断为0
       c)"a"或"ab":写方式打开,新的内容被附加到文件尾
       d)"r+"或"rb+":更新方式打开(读和写)
       e)"w+"或"wb+":更新方式打开,并把文件长度截断为0
       f)"a+"或"ab+":更新方式打开,并把新的内容附加到文件尾
Unix将所有的文件都看作为二进制文件,不做文本文件和二进制文件的区分,其中b就是指定二进制文件。
返回:成功返回一个非空的文件指针FILE *
      失败返回NULL值
(2)fread函数
   #include<stdio.h>
   size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
作用:从文件流stream中读取数据到ptr指定的数据缓冲区中。读取的数据以size为每个数据记录的长度,总共读取nitems个数据记录。
返回:成功则返回读取到数据缓冲区中的数据记录的个数。

(3)fwrite函数
   #include<stdio.h>

    struct dirent   
    {   
      long d_ino; /* inode number 索引节点号 */  
         
        off_t d_off; /* offset to this dirent 在目录文件中的偏移 */  
         
        unsigned short d_reclen; /* length of this d_name 文件名长 */  
         
        unsigned char d_type; /* the type of d_name 文件类型 */  
         
        char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */  
    }  
   size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
作用:从指定的数据缓冲区中取出数据记录,并写到stream指定的数据流中。size为每个数据记录的长度,共操作nitems个数据记录。
返回:成功则返回写到数据流中的数据记录的个数。
备注:const修饰缓冲区指针,指针可以变,但是指针指向的缓冲区不能变。

(4)fclose函数
   #include<stdio.h>
   int fclose(FILE *stream);
作用:关闭指定的文件流,因为stdio库会对数据进行缓冲,所以使用fclose非常重要,它使所有尚未写出的数据都写出。
备注:也是因为stdio对于输入输出缓冲等原因,所以需要对设备进行明确的控制的时候,最好还是直接使用系统调用

(5)fflush函数
   #include<stdio.h>
   int fflush(FILE *stream);
作用:将文件流中尚未写出的数据都写出。
备注:fclose隐含执行了一次fflush。
  #include<stdio.h>
  int fputc(int c, FILE *stream);
  int putc(int c, FILE *stream);
  int putchar();

(6)fseek函数
   #include<stdio.h>
   int fseek(FILE *stream, long int offser, int whence);
作用:指定文件流里为下一次读写操作指定的位置。
返回:成功返回0,失败返回-1并设置errno。

(7)fgetc、getc、getchar函数
   #include<stdio.h>
   int fgetc(FILE *stream);
   int getc(FILE *stream);
   int getchar();

作用:a)fgetc
      从文件流中取出下一个字节,并作为一个字符返回
      b)getc
      作用同fgetc,但是可以被实现为宏,
      c)getchar
      相当于getc(stdin),即从标准输入里读取下一个字符,并作为一个字符返回
返回:读取错误返回根据ferror判断,读取文件尾返回根据feof判断

(7)fputc、putc、putchar函数
  #include<stdio.h>
  int fputc(int c, FILE *stream);
  int putc(int c, FILE *stream);
  int putchar();

作用:a)fputc
      将字符写入文件流,并返回写入的字符
      b)putc
      作用同fputc,但是可以被实现为宏,
      c)putchar
      相当于putc(stdout),即向标准输出写一个字符,并返回写入的字符
备注:文件尾(EOF)标识为-1

(8)fgets、gets函数
   #include<stdio.h>
   char *fgets(char *s, int n, FILE *stream);
   char *gets(char *s);
作用:fgets从文件流stream中读取n个字符,并将其写入s指向的字符串。每次最多传输n-1个字符,结尾加上空字节\0结束字符串
      遇到换行符,或者读到文件尾自动结束,换行符也会被读到字符串中。
      gets函数从标准输入中读取字符组成字符串,遇到换行符结束,并丢弃换行符,在字符串结尾加上\0结束字符串。
返回:成功返回一个指向字符串的指针s,错误返回空指针并设置erron。

抱歉!评论已关闭.