文件输入/输出

一 文件是什么?

一个文件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是指定目标文件

原文地址:https://www.cnblogs.com/X404/p/12208875.html