工学1号馆

home

标准I/O库

Wu Yudong    October 23, 2016     C, Linux/Unix   691   

标准I/O库及其头文件stdio.h为底层系统调用提供了一个通用的接口。这个库已经成为ANSI标准C的一部分。在标准I/O库中,与底层文件描述对应的是流(stream),它被实现为指向结构FILE的指针。

本文地址:http://wuyudong.com/2016/10/23/2871.html,转载请注明出处。

在启动程序的时候,有3个文件流是自动打开的:stdin、stdout、stderr,都是在stdio.h头文件定义,分别代表标准输入、标准输出、标准错误输出。与底层文件描述符0、1、2相对应。

1、fopen函数

#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);

fopen打开由filename参数指定的文件,并把它与一个文件流关联,mode指定打开方式

2、fread函数

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);

fread函数用于从一个文件流里读取数据,数据从stream读到由ptr指向的数据缓冲区里,size指定每个记录的长度,计数器nitems指定要传输的记录个数。返回成功读取到数据缓存区里的记录数

3、fwrite函数

从指定的数据缓冲区读取数据写到输出流中,返回值是成功写入的记录个数

#include <stdio.h>
size_t fwrite (const void *ptr, size_t size, size_t nitems, FILE *stream);

4、fclose函数

fclose函数关闭指定的文件流stream,使所有的尚未写出的数据都写出

#include <stdio.h>
int fclose(FILE *stream);

5、fflush函数

作用是把文件流里的所有未写出的数据写出,注意:调用fclose函数的时候隐含执行fflush一次,所以在fclose函数之前不需要执行fflush函数

#include <stdio.h>
int fflush(FILE *stream);

6、fseek函数

fseek函数与lseek系统调用对应的文件流函数,它在文件流里为下一次读写操作指定位置

whence为下列其中一种:(SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2).

SEEK_SET 将读写位置指向文件头后再增加offset个位移量。

SEEK_CUR 以目前的读写位置往后增加offset个位移量。

SEEK_END 将读写位置指向文件尾后再增加offset个位移量。

当whence 值为SEEK_CUR 或SEEK_END时,参数offet允许负值的出现。

参数offset 为根据参数whence来移动读写位置的位移数。Offset:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移)。

返回0表示成功,返回-1表示失败并设置errno指出错误

#include <stdio.h>
int fseek(FILE *stream, long int offset, int whence);

7、fgetc、getc和getchar函数

fgetc函数从文件流里取出下一个字节并把它作为一个字符返回。

getc与fgetc的作用一样,但是它可能被实现成一个宏

getchar函数的作用相当于getc(stdin),从标准输入里读取下一个字符

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

8、fputc、putc和putchar函数

fputc函数把一个字符写到一个输出文件流中,返回写入的值,如果失败就返回EOF。putc的作用也类似于fputc,也是被实现为一个宏,putchar函数相当于 putc(c, stdout),把单个字符写出到标准输出

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

9、fgets和gets函数

fgets函数从输入文件流stream里读取一个字符串

#include <stdio.h>
char *fgets(char *s, int n, FILE *stream);
char *gets(char *s);

参数:

s: 字符型指针,指向存储读入数据的缓冲区的地址。

n: 从流中读入n-1个字符

stream : 指向读取的流。

返回值:

1. 当n<=0 时返回NULL,即空指针。

2. 当n=1 时,返回空串””.

3. 如果读入成功,则返回缓冲区的地址。

4. 如果读入错误或遇到文件结尾(EOF),则返回NULL.

gets函数类似于fgets,只不过它从标准输入读取数据并丢弃遇到换行字符,它在接收字符串的尾部加上一个null字节,gets存在安全隐患,应该避免使用并用fgets代替

如果文章对您有帮助,欢迎点击下方按钮打赏作者

Comments

No comments yet.
To verify that you are human, please fill in "七"(required)