zoukankan      html  css  js  c++  java
  • C语言常用IO函数

    由于历史元素,C语言的IO函数很多,很容易混淆,在此总结一下。

    一、文件复制

    /**
     * Created by wangbin on 2022/1/11.
     * It works fine on linux but not on windows
     * fprintf和printf的区别是,printf是在向标准输出流stdout写数据,fprintf可以向它的第一个参数指定的流中写数据
     * scanf始终从标准输入流stdin读入数据,而fscanf从它的第一个参数所指定的流中读入数据
     * frepoen(const char *filename,const char *mode,FILE *fp)为一个打开的流附加一个文件,用于向文件追加数据
     * putchar()向标准输出流写一个字符
     * fputc()和putc()都是putchar()的更通用版本
     * getchar()从标准输入流读入一个字符
     * fgetc()和getc()从任意流读入字符
     * puts()想标准输出写入一个字符串,并加一个换行符
     * fputs()是puts()的更通用版本,可以向第二个参数指定的任意流写入一个字符串,不同在于fputs不会自动添加换行符
     * gets()从标准输入流读取一行,读到换行符为止,并抛弃换行符
     * fgets()从任意流读取信息,直到遇到换行符或参数指定的字符
     * fread、fwrite运行程序在单步中读写大的数据块
     *
    */
    
    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main(int argc, char *argv[]) {
        FILE *src_file, *dest_file;
        int ch;
        if (argc != 3) {
            fprintf((FILE *) stderr, "usage fcopy source_file dest_file\n");
            printf("usage fcopy source_file dest_file");
            exit(EXIT_FAILURE);
        }
        if ((src_file = fopen(argv[1], "r")) == NULL) {
            fprintf((FILE *) stderr, "cannot open %s\n", argv[1]);
            printf("cannot open %s\n", argv[1]);
            exit(EXIT_FAILURE);
        }
        if ((dest_file = fopen(argv[2], "a")) == NULL) {
            fprintf((FILE *) stderr, "cannot open %s\n", argv[2]);
            printf("cannot open %s\n", argv[2]);
            fclose(src_file);
            exit(EXIT_FAILURE);
        }
        while ((ch = getc(src_file)) != EOF) {
            putc(ch, dest_file);
        }
        printf("success!");
        fclose(src_file);
        fclose(dest_file);
    
        return 0;
    }

    二、文件块读写

    /**
     * Created by wangbin on 2022/1/13.
     * Modifies a file of part records by setting quantity on_hand to zero for all records
     * fread、fwrite运行程序在单步中读写大的数据块
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define NAME_LEN 5
    #define MAX_PARTS 10
    
    struct part {
        int number;
        char name[NAME_LEN + 1];
        int on_hand;
    } inventory[MAX_PARTS];
    
    int num_parts;
    
    int main(void) {
        FILE *fp;
        int i;
        if ((fp = fopen("invent.dat", "rb+")) == NULL) {
            fprintf(stderr, "Can't open inventory file\n");
            exit(EXIT_FAILURE);
        }
        //把文件内容读入数组。参数1:数组名;参数2:数组元素大小;参数3:数组元素数量;参数4:文件指针
        num_parts = fread(inventory, sizeof(struct part), MAX_PARTS, fp);
        for (i = 0; i < num_parts; i++) {
            inventory[i].on_hand = 0;
        }
        //将文件指针重新指导文件起始处
        rewind(fp);
        //参数1:数组地址;参数2:数组元素大小;参数3:要写的元素数量;参数4:文件指针
        fwrite(inventory, sizeof(struct part), num_parts, fp);
        fclose(fp);
        return 0;
    }
  • 相关阅读:
    如何在image加载的图片上再加载一个透明PNG水印图片
    Sublime3在windows下安装
    Redash中文版安装问题大全
    Ubuntu20.04和Docker环境下安装Redash中文版
    ubuntu 设置sudo 免密码
    ubuntu开启sshd
    secureCRT登录ubuntu 报错:`No compatible key-exchange method. The server supports these methods: diffie-hellman`
    监控elasticsearch
    修改因python是3版本导致的yum问题
    elk使用微信ElartAlert企业微信告警,自定义告警内容
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15798273.html
Copyright © 2011-2022 走看看