C语言标准I/O

C语言中的标准I/O

C语言程序运行时会自动打开三个文件

  1. stdin //标准输入流
  2. stdout //标准输出流
  3. stderr //标准错误输出流

C语言的文件操作基于文件指针(FILE *)

用fopen创建一个文件指针
FILE *fopen(const char *path, const char *mode);
功能:创建一个文件指针
参数:
path : 文件路径 mode : 打开方式
返回值:返回一个文件指针
mode取值:
w :将文件长度截断为零,或者创建文本文件,用于写。流被定位于文件的开始。
w+ :打开文件,用于读写。如果文件不存在就创建它,否则将截断它。流被定位于文件的开始。
r :打开文本文件,用于读。流被定位于文件的开始。
r+ :打开文本文件,用于读写。流被定位于文件的开始。
a :打开文件,用于追加 (在文件尾写)。如果文件不存在就创建它。流被定位于文件的末尾。
a+ :打开文件,用于追加 (在文件尾写)。如果文件不存在就创建它。读文件的初始位置是文件的开始,但是输出总是被追加到文件的末尾。
总结 :带加号的都是可读可写,r只读不能创建文件,w只写并且会清空原有文件,a追加写入
r+可读可写,不能创建文件,读写流定位都在头,w+打开并清空文件,如果文件不存在则创建,读写流定位都在头
a+可读可写,文件不存在就创建文件,打开文件后写入流定位在末尾,读取流定位在头

// 以只读的方式打开文件
FILE *fp = fopen("./test.txt", "r"); 

对文件读取的方式

fgetc(按字符读取)

int fgetc(FILE *stream);
参数    stream:文件指针
功能    从流中读取下一个字符,并将其作为无符号char类型转换为整型
返回值  无符号char类型转换为整型返回, 在文件结束或错误结束时返回EOF

fgets(按行读取)

char *fgets(char *s, int size, FILE *stream);
参数    s:要填充的字符串首地址   size:要读取的字符个数    stream:文件指针
功能    从流中最多读入一个小于size的字符,并将它们存储到s所指向的缓冲区中。读在EOF或换行符之后停止。如果一个换行符被读取,它将被存储到缓冲区中。结束空字节('\0')存储在缓冲区的最后一个字符之后。
返回值  成功时返回s,错误时返回NULL,文件结束或者没有读到任何字符时返回NULL。

对文件的写入方式

fputc(按字符写入)

int fputc(int c, FILE *stream);
参数    c:要写入文件的字符   stream:文件指针
功能    将字符串s写入流,而不终止空字节('\0')。
返回值  无符号char类型的字符,转换为int返回; 如果出现错误,返回EOF。

fputs(按行写入)

int fputs(const char *s, FILE *stream);
参数    s:要写入的字符串     stream:文件指针
功能    无符号char类型字符,转换为int返回;如果出现错误,返回EOF。
返回值  成功时返回一个非负数,错误时返回EOF。
#include <stdio.h>
int main(int argc, char const *argv[]) { 
    // 以读写的方式打开一个空文件
    FILE *fp = fopen("./test.txt", "w+");
    //将字符h写入文件
    fputc('h', fp);
    //写入字符串
    fputs("ello would\nnihao beijing", fp);
    //释放文件
    fclose(fp);
    /**
     * text.txt中数据为
     * hello would
     * nihao beijing
     */
    fp = NULL;
    // 以只读的方式打开文件
    fp = fopen("./test.txt", "r");
    // 读取第一个字符
    char ch = fgetc(fp);
    // 读取第一行字符
    char s[20];
    fgets(s, sizeof(s), fp);
    printf("ch = %c\ns = %s\n", ch, s);
    /**
     * 输出结果为
     * ch = 'h'
     * s = "ello would\n"
     * 读取时候会将'\n'一起读入
     */
}

输出错误信息函数perror

perror(const char *s);
参数为字符串
返回值为空
功能是打印错误信息

捕获错误代码errno 打印错误信息strerror

error是一个全局变量用于存储错误信息代码
char *strerror(int errnum);
功能    根据错误代码获取错误信息
返回值  返回错误信息的字符串
参数    错误代码

文件状态函数feof() ferror()

int feof(FILE *stream);
    功能:判断是否读取到文件末尾
    参数:
    stream:文件指针
    返回值:
    成功:非0,表示已经到文件末尾了
    失败:0,表示没有到文件末尾
int ferror(FILE *stream);
    功能:判断读函数是否执行失败
    参数:
        stream:文件指针
    返回值:
        成功:非0,读函数执行失败
        失败:0,读函数执行成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值