标准IO知识梳理_iso有多少个标准

标准IO知识梳理_iso有多少个标准3、标准IO模仁打开了三个流,stdin(标准输入)stdout(标准输出)stderr(标准错误)a/ab:追加(在末尾写),文件不存在创建,存在追加,文件流定位到文件末尾

标准IO知识梳理_iso有多少个标准"

1概念:

在C库中定义的一组用于输入输出的函数

2特点:

1、通过缓冲机制减少系统调用,提高效率

2、围绕流进行操作,流用FILE *表示

3、标准IO模仁打开了三个流,stdin(标准输入) stdout(标准输出) stderr(标准错误)

3缓冲区

1、全缓冲:与文件相关

刷新条件:

程序退出 缓冲区满刷新 强制刷新:fflush

2、行缓冲:与终端相关

刷新条件:

\n 程序退出 缓冲区满刷新 强制刷新:fflush

3、不缓冲:没有缓冲区,标准错误

4函数

day1:fopen fclose fgetc fputc fgets fputs

fread fwrite feof ferror rewind fflush

fopen/fclose:打开/关闭文件

r/rb:只读,当文件不存在时报错,文件流定位到文件开头

r+/r+b:可读可写,当文件不存在时报错,文件流定位到文件开头

w/wb:只写,文件不存在创建,存在清空

w+/w+b:可读可写,文件不存在创建,存在清空

a/ab:追加(在末尾写),文件不存在创建,存在追加,文件流定位到文件末尾

#include<stdio.h>
int main(int argc, char const *argv[])
{
    FILE * fp;//创建流
    fp=fopen("nihao.txt","w");//有nihao.txt文件打开,没有创建
    if(NULL ==fp )
    {
        perror("fopen error\n");//标准错误
        return -1;
    }
    printf("fopen success\n");
    fclose(fp);//关闭nihao.txt文件
    return 0;
}

perror:根据错误码输出错误

fputc fgetc 读或者写一个字符

        运用其实现cat功能

#include <stdio.h>
int main(int argc, char const *argv[])
{
    if(argc !=2)//终端输入不为两个参数时
    {
        printf("please input %s <filename>",argv[0]);
        return -1;
    }
    FILE *fd;
    fd = fopen(argv[1], "r");
    if (NULL == fd)
    {
        perror("fopen error\n");
        return -1;
    }
    //循环读文件
    int ch;
    //printf("fopen success\n");
    while (1)
    {

        ch = fgetc(fd);
        if (feof(fd))//当指针指向结尾的EOF时,相当与EOF==-1
            break;
        fputc(ch, stdout);
    }
    fclose(fd);
    return 0;
}

fgets fputse:按行读或者写字符串

#include<stdio.h>
int main(int argc, char const *argv[])
{
    FILE * fp=fopen("hello.txt","r+");
    if(fp==NULL)
    {
        printf("fopen error\n");
        return -1;
    }
    char buf[32];
    fgets(buf,32,stdin);//从终端输入数组
    printf("buf:%s",buf);
    fputs(buf,stdout);//从数组输出到终端

    return 0;
}

fwrite :二进制读写 从文件流写入fread:从文件流读出数据

#include <stdio.h>
int main(int argc, char const *argv[])
{
    FILE *fg = fopen("hello.txt", "w+");
    if (NULL == fg)
    {
        perror("fg error\n");
        return -1;
    }
    float arr[3] = {1.1, 2.2, 3.3};
    fwrite(arr, sizeof(float), 3, fg);//二进制读入文件
    rewind(fg);//文件指针回到文件开始位置
    float new[3] = {0};
    fread(new, sizeof(float), 3, fg);//从文件读出数据
    printf("%.2f %.2f %.2f\n",new[0],new[1],new[2]);
    return 0;
}

用fputs实现cat功能

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    if (argc != 2) //终端输入不为两个参数时
    {
        printf("please input %s <filename>\n", argv[0]);
        return -1;
    }
    FILE *fp;
    //打开文件
    fp = fopen(argv[1], "r");
    if (NULL == fp)
    {
        perror("fopen error\n");
        return -1;
    }
    int len = 0;
    char buf[32] = {0};
    while (fgets(buf, 32, fp) != NULL) //fgets读到结尾返回NULL
    {
        if (buf[strlen(buf) - 1] == '\n')//读完32个后最后是‘\0’,判断前一个是否是‘\n’
            len++;
    }
    printf("%d %s\n", len, argv[1]);
    fclose(fp);
    return 0;
}

用fread fwrite实现cp

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    char buf[32] = {0};
    ssize_t s = 0;//无符号char类型
    if (argc != 3)
    {
        printf("please input %s <srcfile> <destfile>", argv[0]);
        return -1;
    }
    //打开两个文件
    FILE *yuan = fopen(argv[1], "r");
    if (NULL == yuan)
    {
        perror("yuan error\n");
        return -1;
    }
    FILE *biao = fopen(argv[2], "w");
    if (NULL == biao)
    {
        perror("biao error\n");
        return -1;
    }
    //用s接受目的是防止最后不到32个如12asf,时候传进去会12asfnih
    while ((s = fread(buf, 1, 32, yuan)) != 0)
    {
        fwrite(buf, 1, s, biao);
    }
    fclose(yuan);
    fclose(biao);
    return 0;
}

fseek和ftell

#include<stdio.h>
int main(int argc, char const *argv[])
{
    FILE * fp=fopen("hello.txt","w+");
    if(NULL==fp)
    {
        perror("fopen hello.txt error");
        return -1;
    }
    fputs("hello world",fp);
    //指针指向开头那么便在第一个字符前面位置
    //指针指向最后那么便在最后一个字符前面位置
    fseek(fp,-2,SEEK_END);//指针相对对后前移两个指向l
    printf("%ld\n",ftell(fp));//返回当前指针位置,
    fputc('a',fp);//将l改为a

    fseek(fp,2,SEEK_SET);//指针相对对开头前移两个指向l
    printf("%ld\n",ftell(fp));//返回当前指针位置,

    printf("%c\n",fgetc(fp));

    fclose(fp);
    return 0;
}

freopen:将其流重定向到目标文件

#include<stdio.h>
int main(int argc, char const *argv[])
{
    FILE *fp;
    fp = freopen("hello.txt","w+",stdout);//将终端重定向到hello.txt
    if(NULL == fp)
    {
        perror("freopen err");
        return -1;
    }
    printf("world\n");//向hello.txt输入world
    freopen("/dev/tty","r+",stdout);//将终端重新定向回来,其终端在/dev/tty下
    return 0;
}

rewind:将其文件指针定位到开头

今天的文章标准IO知识梳理_iso有多少个标准分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/62039.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注