学习记录第十九天

标准io的概念 


    IO  input  output
    I: 键盘是标准输入设备 ====》默认输入就是指键盘
    O: 显示器是标准输出设备 ==》默认输出就是指显示器
    Linux操作系统当中IO都是对文件的操作

man
           

man man  ==>所有man的帮助
 man  xxx == man 1 xxx ===>查看当前xxx命令
 man 2 xxx  ===>查看xxx对应的系统调用函数
 man 3 xxx  ===》查看xxx对应的标准库函数

 fopen


fopen 是 C 语言标准库中用于打开文件的函数。它定义在 stdio.h 头文件中,并返回一个指向 FILE 结构的指针,该结构包含了有关打开文件的信息。fopen 函数的原型如下:
FILE *fopen(const char *filename, const char *mode);

这里的 filename 参数是一个指向字符串的指针,指定了要打开的文件的名称。mode 参数是另一个字符串,指定了文件的打开模式,可以是以下几种之一:
  1."r":以只读方式打开现有文件。
  2."w":以只写方式打开文件,如果文件已存在则清空其内容;如果文件不存在则创建一个新文件。
  3."a":以追加方式打开文件,如果文件不存在则创建一个新文件;如果文件已存在则在文件末尾追加内容。
  4."r+":以读写方式打开文件,文件必须存在。
  5."w+":以读写方式打开文件,如果文件不存在则创建一个新文件;如果文件已存在则清空其内容。
  6."a+":以读写方式打开文件,如果文件不存在则创建一个新文件;如果文件已存在则在文件末尾追加内容。

​
  打开文件: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);

​

fgets

char *fgets(char *str, int n, FILE *stream);

1.str 是一个指向字符数组的指针,用于存放读取到的字符串。
  2.n 是要读取的最大字符数,包括终止字符 \0。
  3.stream 是一个指向 FILE 对象的指针,指定了输入流。
如果在读取 n-1 个字符之前遇到文件结束或读取错误,fgets 会停止读取并返回 NULL。如果成功读取,fgets 会在字符串末尾添加 \0,并返回 str。

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    
    if(argc<3)
    {
        printf("usage:./a.out filename1 filename2\n");
        return 1;
    }

    FILE* src = fopen(argv[1],"r");
    FILE* dst = fopen(argv[2],"w");
    if(NULL == src ||NULL == dst)
    {
        printf("fopen error\n");
        return 1;
    }

    char buf[1024]={0};
    
    while(1)
    {
        memset(buf,0,sizeof(buf));
        if(fgets(buf,sizeof(buf),src))
        {
            //printf("%s\n",buf);
            fputs(buf,dst);
        }
        else 
        {
            break;
        }
    }
    fclose(dst);
    fclose(src);
    return 0;
}

fputs

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

1.str 是一个指向包含要写入字符串的指针。
  2.stream 是一个指向 FILE 对象的指针,指定了输出流。
如果成功写入,fputs 返回非负数,表示写入的字符数;如果发生错误,返回 EOF。

#include <stdio.h>

int main(int argc, char *argv[])
{
    
    FILE* fp = fopen("1.txt","w");
    if(NULL == fp)
    {
        printf("fopen error\n");
        return 1;
    }

    char buf[500]="你好,fgets测试";
    int ret = fputs(buf,fp);
    if(EOF == ret)
    {
        printf("fputs errors\n"); 
        return 1;
    }
    fclose(fp);
    return 0;
}

fgetc

int fgetc(FILE *stream);

这里的 stream 是一个指向 FILE 结构的指针,指向已打开的文件流。fgetc 函数在读取成功时返回读取到的字符(作为 int 类型),以便能够表示文件末尾的特殊值 EOF。如果到达文件末尾或发生读取错误,fgetc 返回 EOF。

int main(int argc, char *argv[])
{
    
    FILE* fp = fopen("1.txt","r");
    if(NULL == fp)
    {
        printf("fopen error");
        return 1;
    }
    while(1)
    {
        int c = fgetc(fp);
        if(EOF ==c) // -1 
        {
            break;
        }
        printf("%c",c);
    }
    printf("\n");
    fclose(fp);


    return 0;
}

fputc

int fputc(int char, FILE *stream);

char 参数是要写入文件的字符(作为 int 类型),stream 是一个指向 FILE 结构的指针,指向目标文件流。fputc 在写入成功时返回写入的字符,如果发生写入错误,则返回 EOF。

#include <stdio.h>

int main(int argc, char *argv[])
{
    
    FILE* src = fopen("1.txt","r");
    FILE* dst =fopen("2.txt","w");
    if(NULL == src || NULL == dst)
    {
        printf("fopen error");
        return 1;
    }
    while(1)
    {
        int c = fgetc(src);
        if(EOF == c)
        {
            break;
        }
        fputc(c,dst);
    }
    fclose(dst);
    fclose(src);

    return 0;
}

fwrite

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

1.ptr 是一个指向要写入数据的缓冲区的指针。
2.size 是每个数据项的大小(以字节为单位)。
3.nmemb 是要写入的数据项的数量。
4.stream 是一个指向 FILE 对象的指针,指定了输出流。
5.fwrite 函数返回成功写入的数据项数量,如果发生写入错误或达到文件末尾,返回值为0。

fread

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

1.ptr 是一个指向缓冲区的指针,用于存放读取到的数据。
2.size 是每个数据项的大小(以字节为单位)。
3.nmemb 是要读取的数据项的数量。
4.stream 是一个指向 FILE 对象的指针,指定了输入流。
5.fread 函数返回成功读取的数据项数量,如果达到文件末尾或发生读取错误,返回的数量可能小于 nmemb。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值