学习笔记第十九天

1.标准I/O的基本概念

标准输入(stdin):默认是指键盘输入。

标准输出(stdout):默认是指显示器输出。

标准错误(stderr):用于输出错误信息,也是指向显示器,但与stdout不同,stderr通常是无缓冲的,以确保错误信息能立即显示。

2.标准I/O函数

标准I/O库提供了一系列函数来打开、读写和关闭文件。这些函数包括:

打开文件:FILE *fopen(const char *path, const char *mode);

关闭文件:int fclose(FILE *stream);

字符读写:int fgetc(FILE *stream);

int fputc(int char, FILE *stream);

行读写:char *fgets(char *str, int n, FILE *stream);

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

块读写:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

3.缓冲机制

标准I/O库使用缓冲机制来提高效率。缓冲分为三种类型:

全缓冲:对于文件操作,通常使用全缓冲。当缓冲区满、文件关闭或显式调用fflush时,缓

冲区内容才会被写入文件。

行缓冲:对于标准输出(stdout)和某些特殊文件(如终端),使用行缓冲。当遇到换行符、

缓冲区满、文件关闭或显式调用fflush时,缓冲区内容会被刷新。

无缓冲:标准错误(stderr)通常是无缓冲的,以确保错误信息能立即显示。

4.文件操作的步骤

打开文件:使用fopen函数打开文件,并返回一个FILE指针。

读写文件:使用标准I/O库提供的函数进行读写操作。

关闭文件:使用fclose函数关闭文件,并释放相关资源

5.文件打开模式

r:只读模式。文件必须存在,否则报错。

r+:读写模式。文件必须存在,否则报错。

w:只写模式。文件不存在则创建,存在则清空内容。

w+:写读模式。文件不存在则创建,存在则清空内容。

a:追加模式。文件不存在则创建,存在则在文件末尾追加。

a+:追加读写模式。文件不存在则创建,存在则在文件末尾追加,同时允许读取。

6.示例

cs 复制代码
while(1) 
{  
    fputc(fgetc(stdin), stdout);  
}

使用EOF宏判断,但需注意EOF在C语言中通常定义为-1,但实际读取时不会直接返回-1,而

是到达文件末尾时返回EOF。

cs 复制代码
#include<stdio.h>

int main(void)
{
    FILE* src = fopen("1.txt","r");
    FILE* dst = fopen("2.txt","w");
    if(NULL == src||NULL ==dst)
    {
        printf("error1!");
        return 1;
    }
    while(1)
    {
        int c = fgetc(src);
        if(EOF == c)
        {
            break;
        }
        fputc(c,dst);
    }
    fclose(src);
    fclose(dst);
    return 0;
}
cs 复制代码
#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
    if(argc<3)
    {
        printf("error1!\n");
        return 1; 
    }
    FILE* src = fopen(argv[1],"r");
    FILE* dst = fopen(argv[2],"w");
    if(NULL == src)
    {
        printf("error1!\n");
        return 1;
    }
    char buf[4096]= {0};
    while(1)
    {
        memset(buf,0,sizeof(buf));
        if(fgets(buf,sizeof(buf),src))
        {
            int a = fputs(buf,dst);
            if(a == EOF)
            {
                printf("error2!\n");
                return 1;
            }
        }
        else
        {
            break;
        }
    }
    fclose(src);
    fclose(dst);
    return 0;
}
cs 复制代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
    if(argc<3)
    {
        printf("error!\n");
        return 1; 
    }
    FILE* src = fopen(argv[1],"r");
    FILE* dst = fopen(argv[2],"w");
    if(NULL == src||dst == NULL)
    {
        printf("error1!\n");
        return 1;
    }
    char buf[2]= {0};
    while(1)
    {
        bzero(buf,sizeof(buf));
        if(fread(buf,sizeof(buf),1,src))
        {
            int a = fwrite(buf,sizeof(buf),1,dst);
            if(a == EOF)
            {
                printf("error2!\n");
                return 1;
            }
        }
        else
        {
            break;
        }
    }
    fclose(src);
    fclose(dst);
    return 0;
}
相关推荐
2501_942326441 小时前
寒假高效记忆法助力学习飞跃
学习
计算机程序设计小李同学1 小时前
基于SSM框架的动画制作及分享网站设计
java·前端·后端·学习·ssm
深情的小陈同学1 小时前
工作学习笔记 —— 支持手机端的添加表单行操作
笔记·学习·ai编程
xiangshi_yan2 小时前
内核学习之路【4/100】-io
学习
am心2 小时前
学习笔记-小程序-导入商品浏览功能实现
笔记·学习
布谷歌2 小时前
开发笔记:如何消除秘钥数据对RPC负荷、日志、系统安全的伤害?
网络·笔记·网络协议·rpc
hkNaruto3 小时前
【AI】AI学习笔记:LangGraph入门 三大典型应用场景与代码示例及MCP、A2A与LangGraph核心对比
人工智能·笔记·学习
专注于大数据技术栈3 小时前
java学习--LinkedHashSet
java·开发语言·学习
kingmax542120083 小时前
北京高一历史上学期期末考情分析与核心知识点精讲(完整版)-吐血整理-全网最全
笔记·学习方法·历史
宵时待雨4 小时前
数据结构(初阶)笔记归纳3:顺序表的应用
c语言·开发语言·数据结构·笔记·算法