- 2
- 0
- 约1.11万字
- 约 65页
- 2018-02-13 发布于天津
- 举报
第10章 文件操作 ;本章主要内容;10.1 文件概述 ;文件;ASCII形式与二进制形式的比较 ;FILE结构类型由系统定义,其格式各编译系统略有差别,大致如下:
struct _iobuf
{int _cnt;//输入缓冲区中等待取的字符个数
int _fd; //文件号,或通道号
int _flag; //I/O错误标志,有错则为非0
char *_base; //指向 I/O缓冲区的首地址
char *_ptr; //指向当前所取的字符
char *_fname; //指向文件识别名
…
}
?typedef struct _iobuf FILE; ;对于每一个要操作的文件,都必须定义一个指向结构文件的指针变量;缓存的概念 ;标准I/O的三种缓存 ;10.2 文件的基本操作 ;【例】tmpnam和tmpfile函数的使用
#include stdio.h
#include stdlib.h
int main(void)
{ char name[20],line[20]; //定义字符数组,用以存放文件名
FILE * fp;
printf(%s\n,tmpnam(name)); //输出创建的第一个临时文件名
tmpnam(name); //创建第二个临时文件;printf(%s\n,name);
//输出第二个临时文件名
if( (fp=tmpfile())==NULL)
//判断是否创建了临时文件
perror(create temp file failed!\n);
fputs(hello temp file!\n,fp);
//将fp指针指向字符串,并移到尾部
rewind(fp); //将fp指针指回到字符串的首地址;if(fgets(line,sizeof(line),fp)==NULL)
//将字符串存放在line数组中
perror(fgets failed!);
fputs(line,stdout);
//将line数组中的内容输出到屏幕
exit(0);
}
运行结果如下:
Tmp1.$$$
Tmp2.$$$
hello temp file!; 文件的读写包括非格式化读写和格式化读写,它们的用法不同,功能也不同 ; (1) 每次一个字符的读写
int fgetc(FILE * stream);
?注意:
由于是将usigned char转换为int,因此正常字符的范围只能是0~255
ANSI C中还定义了getc函数,该函数可能是由宏实现的,因此效率可能比较高。
ANSI C中还定义了getchar函数,该函数相当于fgetc(stdin)。;向流中写入一个字符:
int fputc(int c, FILE * stream);
这个函数实现的功能是将c输到stream流的当前位置
注意:
对应getc和getchar,ANSI C中定义了putc和putchar,功能同fputc。;【例】编制程序,运行该程序后可以显示指定文件的内容。例如,假设编译后生成typefile.exe文件,则命令行的格式为:
typefile filename.txt CR
其程序如下:
#include stdio.h
#include stdlib.h
void main(int argc,char *argv[])
{int ch;
FILE *fp;;if((fp=fopen(argv[1],r))==NULL)
{printf(The file:%s can’t be opened,argv[1]);
exit(1);
}
ch=fgetc(fp); //读取字符
while (ch!=EOF)
{ putchar(ch); //逐个输出字符
ch=fgetc(fp); //读取字符
}
printf(argc is %d,argc);
fclose(fp);
};(2) 每次一行的读写
char *fgets(char * buf, int n, FILE *stream) ;【例】基于行的I/O的使用。
#include stdio.h
#include stdlib.h
void main(void)
{ char * buf;
int n= 16;
buf=(char *)malloc(n);//开辟存储空间
while( fgets(buf,n,stdin) != NULL )
{ fputs(buf,stdout);
puts(buf);
}
} ;运行上面的程序,如果输入字符串12345,运行结果
原创力文档

文档评论(0)