linux c--标准IO
2021-03-08
标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I/O提供了三种类型的缓存。
- 全缓存:当填满标准I/O缓存后才进行实际的I/O操作。
- 行缓存:当输入或输出中遇到新行符时,标准I/O库执行I/O操作。
- 不带缓存:stderr就是了。
fopen
C 库函数FILE _fopen(const char _filename, const char *mode)
使用给定的模式 mode 打开 filename 所指向的文件。
|
|
参数
- filename – 这是 C 字符串,包含了要打开的文件名称。
- mode – 这是 C 字符串,包含了文件访问模式,模式如下:
- “r” 打开一个用于读取的文件。该文件必须存在。
- “w” 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
- “a” 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
- “r+” 打开一个用于更新的文件,可读取也可写入。该文件必须存在。
- “w+” 创建一个用于读写的空文件。
- “a+” 打开一个用于读取和追加的文件。
- 控制读写方式的字符串
- “t” 文本文件。如果不写,默认为"t"。
- “b” 二进制文件。
调用 fopen() 函数时必须指明读写权限,但是可以不指明读写方式(此时默认为"t")。
返回值
该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。
实例
|
|
fclose
C 库函数int fclose(FILE *stream)
关闭流 stream。刷新所有的缓冲区。
|
|
参数
- stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流
返回值
如果流成功关闭,则该方法返回零。如果失败,则返回 EOF。
|
|
fread
C 库函数size_t fread(void _ptr, size_t size, size_t nmemb, FILE _stream)
从给定流 stream 读取数据到 ptr 所指向的数组中。
|
|
参数
- ptr – 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
- size – 这是要读取的每个元素的大小,以字节为单位。
- nmemb – 这是元素的个数,每个元素的大小为 size 字节。
- stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。
返回值
成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。
实例
|
|
fwrite
C 库函数size_t fwrite(const void _ptr, size_t size, size_t nmemb, FILE _stream)
把 ptr 所指向的数组中的数据写入到给定流 stream 中。
|
|
参数
ptr – 这是指向要被写入的元素数组的指针。
size – 这是要被写入的每个元素的大小,以字节为单位。
nmemb – 这是元素的个数,每个元素的大小为 size 字节。
stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
返回值
如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
注意
fwrite写完后文件流指针会偏移到写入字符串的最后位置
实例
|
|
fseek
C 库函数int fseek(FILE *stream, long int offset, int whence)
设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。
|
|
参数
- stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
- offset – 这是相对 whence 的偏移量,以字节为单位。
- whence – 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
- SEEK_SET 文件的开头
- SEEK_CUR 文件指针的当前位置
- SEEK_END 文件的末尾
返回值
如果成功,则该函数返回零,否则返回非零值。
实例
|
|
ftell
C 库函数long int ftell(FILE *stream)
返回给定流 stream 的当前文件位置。
|
|
参数
- stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
返回值
该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。
实例
|
|
freopen
以指定模式重新指定到另一个文件。模式用于指定新文件的访问方式。
头文件:stdio.h
C89函数声明:
|
|
C99函数声明:
|
|
形参说明:
- filename:需要重定向到的文件名或文件路径。
- mode:代表文件访问权限的字符串。
- r 打开一个用于读取的文件。该文件必须存在。
- w 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
- a 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
- r+ 打开一个用于更新的文件,可读取也可写入。该文件必须存在。
- w+ 创建一个用于读写的空文件。
- a+ 打开一个用于读取和追加的文件。
- stream:需要被重定向的文件流。
返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。
示例:
|
|
调用freopen()
前会打印到标准输出
调用freopen()
后会打印到file.txt
fgets
C 库函数char *fgets(char *str, int n, FILE *stream)
从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
|
|
参数:
- str: 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
- n: 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
- stream: 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
返回值:
- 成功: 该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。
- 错误: 返回一个空指针。
ferror
C 库函数 int ferror(FILE *stream)
测试给定流 stream 的错误标识符。
|
|
参数:
- stream: 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
返回值:
如果设置了与流关联的错误标识符,该函数返回一个非零值,否则返回一个零值。
例子:
|
|
假设我们有一个文本文件 file.txt,它是一个空文件。让我们编译并运行上面的程序,因为我们试图读取一个以只写模式打开的文件,这将产生以下结果。
|
|