Linux文件操作之——标准IO

知识点——标准IO

标准io:stdio 属于c库,可移植性强。而系统IO只属于Linux。

标准IO 有缓冲区:全缓冲、行缓冲、无缓冲,系统IO无缓冲区。

标准io的实质还是通过C库函数去调用系统IO。

标准IO函数:字符、字符串读写

fopen   fclose       文件打开关闭

fread    fwrite        文件读写

fgets    fputs         从文件中读取/输出字符串

gets     puts          获取、输出字符串

fgetc    fputc         从文件中获取、输出字符

getc     putc         终端输出输入一个字符

getchar    putcahr

 

fscanf   fprintf        格式化输入输出、从文件

sscanf sprintf        从字符串

scanf    printf         从终端

 

fflush                    冲刷缓存区(全缓冲、含缓冲)

fseek      ftell    rewind         光标定位

feof                       文件末尾

对应函数解析:

fpoen函数——打开文件

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

返回值:成功返回一个文件流指针,失败返回一个负数的错误码。

fclose函数——关闭一个文件

int fclose( FILE *fp );

返回值:成功返回0,失败返回-1.errornum被设置。

 

fread函数——从文件流中读取数据

size_t fread ( void *buffersize_t sizesize_t countFILE *stream) ;

返回值:成功返回成功读取的字节数,失败返回一个错误码,读取字节数小于count、需要判断是否为EOF;

fwrite函数

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

返回值:返回实际写入的数据块数目

(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;

(2)size:要写入内容的单字节数;

(3)count:要进行写入size字节的数据项的个数;

(4)stream:目标文件指针;

(5)返回实际写入的数据项个数count。

要注意:写和读取的位置与打开文件时候的属性有关系。

打开文件的权限:

r 以只读方式打开文件,该文件必须存在。
r+ 以读/写方式打开文件,该文件必须存在。
rb+ 以读/写方式打开一个二进制文件,只允许读/写数据。
rt+ 以读/写方式打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则长度清为 0,即该文件内容消失,若不存在则创建该文件。
w+ 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF 符保留)。
a+ 以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的 EOF 符不保留)。

 

fgets/fputs

char *fgets(char *buf, int bufsize, FILE *stream);

参数

*buf: 字符型指针,指向用来存储所得数据的地址。

bufsize: 整型数据,指明存储数据的大小。

*stream: 文件结构体指针,将要读取的文件流。

返回值

  1. 成功,则返回第一个参数buf;

  2. 在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;

  3. 如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。

int fputs(const char *str, FILE *stream);

返回值:该函数返回一个非负值,如果发生错误则返回 EOF(-1)。

(1)str:这是一个数组,包含了要写入的以空字符终止的字符序列。

(2)sstream:指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流

 

注意:从文件流中读取一个字符或者字符串的时候光标会随之改变。

函数名: fflush

功 能: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时

头文件:stdio.h

原型:int fflush(FILE *stream)

其中stream是要冲洗的流

如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。失败返回EOF指出一个错误。

 

fseek、rewind、ftell函数

int fseek(FILE *stream, long offset, int fromwhere);

用法同lseek;

long ftell(FILE *stream);

返回当前指针距离开始的长度,注意是long型,超过表达范围时候回出现错误。

rewind函数,将一个文件流的指针重新指向开头。

 

FEOF函数——判断文件指针是否到达末尾

int feof(fp);

如果到达末尾,返回真,如果没有,返回假(0);

 

 

格式化IO:

fscanf/fprintf

sscanf/sprintf

scanf/printf

函数名: fscanf

功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。

返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。

用法:

1

int fscanf(FILE*stream,constchar*format,[argument...]);

FILE *stream:文件指针

char *format:格式字符串

[argument...]:输入列表

 

int fprintf (FILE* stream, const char*format, [argument])

FILE*stream:文件指针

const char* format:输出格式

[argument]:附加参数列表

 

ssanf/sprintf

从一个字符串中格式化输入,输出

 

关于获取字符串fgets,gets 、getc,getchar,fscanf,sscanf,scanf中获取换行符号与空格符号、制表符号的关系。

fscanf    sscanf    scanf不会读取\n和空格,只会读取连续的字符。

getchar  fgetc   getc 会获取空格和换行

fgets  gets 会获取空格但是不会获取换行,或者到0结束。

注意gets不会在意buf 的大小,可能造成栈的溢出。

 

 

 

 

 

 

 

你可能感兴趣的:(Linux文件操作之——标准IO)