文件输入/输出
Posted x404
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件输入/输出相关的知识,希望对你有一定的参考价值。
一 文件是什么?
一个文件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]!=‘