• 文件输入/输出


    一 文件是什么?

    一个文件file通常就是磁盘上的一端命名的存储区。比如stdio.h就是一个包含一些有用的文件的名称。

    在C语言中文件看成是连续的字节序列,其中每一个字节都可以单独地读取。

    I/O级别

    I/O有两个级别:低级I/O:使用操作系统提供的基本I/O服务,标准高级I/O使用一个标准的C库函数包和stdio.h头文件中的定义。

    标准文件:

    C程序自动打开3个文件。这些文件分别称为标准输入、标准输出、标准错误输出 

    默认的标准输入是系统的一般输入设备,通常为键盘;默认的标准输出和标准错误输出是系统的一般输出设备,通常为显示器

    用标准输入程序提供输入是很自然的事情:getchar()  ;gets();scanf() 读取文件

    用标准输出程序输出对象为putchar();puts();printf()输入文件

    标准I/O

    除了可移植性之外,标准I/O包相对低级I/O有两点优势:

    第一,标准I/O包含很多专用的函数,可以方便的处理不同的I/O问题,列入printf()将各种类型的数据转换成为适合终端的字符串输出。

    第二,对输入和输出进行了缓冲,也就是说大块地转移信心(通常每次不少于512个字节),而不是每次一个字节进行转移。例如,当程序读入一个文件时,会把大块数据复制到缓冲区(一块中介存储区)中。这样缓冲大大提高了数据传输率。随后程序就可以分析缓冲区中个别字节。

    #include<stdio.h>
    #include<stdlib.h>
    int main(int argc ,char *argv[]){
    int ch;
    FILE *fp;
    long count=0;
    if(argc!=2){
    printf("Usage:%s filenam
    ",argv[0]);
    exit(1);
    }
    if((fp=fopen(argv[1],"r"))==NULL){
    printf("can't open %s
    ",argv[1]);
    exit(1);
    }
    while((ch=getc(fp)!=EOF){
    putc(ch,stdout);
    count++;
    }
    fclose(fp);
    printf("Flie %s has %ld characters
    ",argv[1],count);
    return 0;
    }
    

      fopen()函数

    fopen()函数打开文件。这个函数在stdio.h中声明,第一个参数是要打开文件名;更确切的说,包含该文件名的字符串的地址。第个参数是用于指明文件打开模式的一个字符串。

    fopen(参数一,参数二)

    模式字符串        意义

    “r” :打开一个文本文件,可以读取文件

    “w”:打开一个文本文件,可以写入文件,先将文件的长度截为零。如果该文件不存在则先创建

    “a”:打开一个文本文件,可以写入文件,向已有文件的尾部追加内容,如果该文件不存在则先创建

    “r+”:打开一个文本文件,可以进行更新,也可以读入和写入文件

    “w+”:打开一个文本文件,可以进行更新(读取和写入),如果该文件存在则首先将其长度截为零;如果不存在就创建

    “a+”:打开一个文本文件,可以进行更新(读取和写入),向已有文件的尾部追加内容,如果该文件不存在则先创建,可以读取整个文件,但写入时只能追加内容

    getc()函数和Putc()函数

    这两个函数的工作方式和函数getchar()putchar()非常相似,不同之处在于需要告诉getc()putc()函数他妈要使用的文件。

    下面方法从标准输入获得一个字符:

    ch=getchar();

    但是下面的语句表示从指针fp指定的文件中获得一个字符:

    ch=getc(fp);

    与它类似的

    putc(ch , fpout);

    将字符ch写入到FILE指针fpout指定的文件中;putc()函数的参数表中,首先是字符,然后是文件指针。

    文件结尾

    从文件中读取数据的程序需要到达文件结尾时停止,例如:

    int ch;//int 来控制EOF

    FILE * fp;

    fp=fopen("wacky.txt","r");

    ch =getc(fp); //获取初始输入

    while(ch!=EOF){

    putchar(ch);

    ch=getc(fp);

    }

    fclose()函数

    fcolse(fp)函数关闭指针fp指定的文件,同时根据需要刷新缓冲区。更正规的程序也需要检查是否关闭成功了文件。fclose()函数将返回值0,否则返回EOF。

    if(fclose(fp)!=09)

    printf("Errof in closing file %s ",argv[1]);

    注:磁盘已满,磁盘被移走或者出现I/O错误等等都会导致fclose()函数执行失败

    标准输入 stdin  键盘

    标准输出 stdout 显示器

    标准错误 stderr 显示器

    文件I/O 

    fprintf() && fscanf()

    文件I/O函数fprintf()和fscanf()的工作方式雨printf()和scanf()相似,区别在于前两者需要第一个参数来指定合适的文件。

    #include<stdio.h>
    #include<stdlib.h>
    $define MAX 40
    int main (void){
    FILE *fp;
    char words[MAX];
    if((fp=fopen("words","a+"))==NULL){
    fprintf(stdout,"can't  open"words"file
    ");
    exit(1);}
    puts("Enter words to add to the file :press th Enter");
    puts("key at the beginning of a line to rerminate.");
    while(gets(words)!=NULL&&words[0]!=‘’)
    fprintf(fp,"%s",words);
    puts("File contents:");
    rewind(fp);
    while(fscanf(fp,"%s",words)==1)
    puts (words);
    if(fcolose(fp!=0)
    fprintf(stderr,"Error closing file
    ");
    return 0;
    }
    

      fgets()和fputs()函数

    fets()接受3个参数,而gets()函数只接受1个参数,fgets()函数的一个参数和gets()函数一样,用于存储输入的地址(char *类型)第二个参数为整数,标识输入字符串的最大长度,最后一个参数是文件的指针,指向要读取的文件。

    fgets(fp,Max,fsd);

    这个fp是一个char 数组的名称,max是字符串的最大长度,fsd是FILE的指针

    puts()函数接收两参数,它们一次是一个字符串的地址和一个文件指针。它把字符串地址指针所指的字符串写入指定的文件。

    fputs(s,fp)

    s是字符串地址,fp是指定目标文件

  • 相关阅读:
    十个 PHP 开发者最容易犯的错误
    PHP 引用是个坑,请慎用
    Laravel 模型事件入门
    PHP 设计模式阅读清单
    《PHP 设计模式》翻译完毕
    数据库分库分表(sharding)系列(一) 拆分规则
    数据库Sharding的基本思想和切分策略
    学习JVM GarbageCollection
    数据库为什么要分库分表
    vue2.0 父子组件通信 兄弟组件通信
  • 原文地址:https://www.cnblogs.com/X404/p/12208875.html
Copyright © 2020-2023  润新知