C语言程序设计_第1页
C语言程序设计_第2页
C语言程序设计_第3页
C语言程序设计_第4页
C语言程序设计_第5页
已阅读5页,还剩23页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计内容简介:之前我们学习输入输出,都是以终端为对象,也就是从键盘输入数据,运行的结果显示在终端,也就是显示器上。 本章的知识是从操作系统的角度看的,也就是键盘输入就是一个输入文件,显示器的显示就是输出文件。第十三章 文件I/O设备输入设备键盘、鼠标软盘、硬盘、光驱(以文件的形式)串行口、并行口、USB接口、网络端口扫描仪、视频采集卡、电视卡、游戏杆、话筒输出设备显示器、打印机软盘、硬盘、CD-R/DVD-R(以文件的形式)串行口、并行口、USB接口、网络端口音箱单纯的输入设备或者单纯的输出设备越来越少字符界面的操作系统一般都提供标准输入与输出设备DOS、Linux、Unix一般情况

2、,标准输入就是键盘,标准输出就是终端显示器操作系统有能力重定向标准输入与输出,比如让文件作为标准输入,打印机作为标准输出这种重定向程序本身是感觉不到的标准输入输出水流“子在川上曰:逝者如斯夫”计算机中的流的概念一般称为数据流,也有叫做字节流、比特流的,还有很具体的文件流、视频流、音频流等时光不能倒流,但计算机中的很多流都是会倒流的如果你想重新读已经读过的数据,或者要修改已经写入的数据,可以发出流控(Flow Control)命令不会倒流的数据流也很多,例如网络上的数据流。网络和数据线等介质只有很小的数据缓冲区,没有大量存储的能力 流(Stream)计算机的内存容易健忘,所以数据必须保存在硬盘、

3、软盘、光盘和磁带等“不健忘”的外存上这些能大量、永久保存信息的媒介,一般都以文件的形式给用户及应用程序使用文件一般指存储在外部介质上具有名字(文件名)的一组相关数据的集合用文件可长期保存数据,并实现数据共享程序中的文件在程序运行时由程序在磁盘上建立一个文件,并通过写操作将数据存入该文件;或由程序打开磁盘上的某个已有文件,并通过读操作将文件中的数据读入内存供程序使用文件(File)的概念在C语言中,文件可以是磁盘文件、终端显示器或打印机等等。程序通过打开操作把流与设备联系起来,文件打开后,可以在程序和文件之间交换数据。程序通过关闭操作断开流与文件的联系。所有流的性质都一样。因为流与设备无关,所以

4、能写入磁盘文件的同一函数也能写入另一设备,如控制台终端等。但文件的能力则可能不同。例如,磁盘文件可以支持随机存取,而键盘则不行。文件与流文件的存放文件访问的基本模式open:打开文件,获得对此文件的指针、引用和句柄等,以证明可以使用此文件read:读文件。参数一般指明要读多少字节,读到哪块内存。每次调用此功能,都是接着上次调用的结束位置读。(所以是个输入流)write:写文件。参数一般指明把哪块内存的内容写入文件,要写多少字节。每次调用此功能,都是接着上次调用的结束位置写。(所以是个输出流)close:关闭文件,表明操作结束,不再使用此文件。文件使用完毕必须关闭,否则影响系统性能seek:随机

5、控制流的当前位置,文件定位文件的访问下面介绍的函数均定义在和中int open(const char *pathname, int access);int fd = open(C:CONFIG.SYS, O_RDWR | O_CREAT);pathname是文件名,包含路径。如果不含路径,表示打开当前目录下的文件access是打开方式,常用为O_RDONLY、O_WRONLY、O_RDWR与O_CREAT、O_TRUNC、O_APPEND的或运算返回值为文件句柄(File Handle) ,留待以后使用。如果打开失败,返回值为-1C语言中的文件访问int read(int handle, vo

6、id *buf, unsigned len);int n_read = read(fd, buf, BUFSIZ);handle是open获得的文件句柄buf是保存读入内容的内存指针len是最大可以读入的字节数返回值为实际读入的字节数,可能大于len。返回0表示读到了末尾,返回-1表示出错C语言中的文件访问int write(int handle, const void *buf, unsigned len);int n_write = write(fd, buf, BUFSIZ);handle是open获得的文件句柄buf是要写入内容的内存指针len是写入多少字节返回值为实际写入的字节数,可

7、能小于len。返回-1表示出错C语言中的文件访问int close(int handle);int ret = close(fd);handle是open获得的文件句柄关闭成功返回0,否则返回-1C语言中的文件访问int fgetc(FILE *fp);int fputc(int c, FILE *fp);char *fgets(char *s, int n, FILE *fp);int fputs(const char *s, FILE *fp);int fscanf(FILE *fp, const char *format, .);int fprintf(FILE *fp, const c

8、har *format, .);C语言独特的文件访问size_t fread(void *ptr, size_t size, size_t n, FILE *fp);size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);int feof(FILE *fp);int fseek(FILE *fp, long offset, int whence);int fclose(FILE *fp);C语言独特的文件访问 函数调用成功返回函数调用成功返回countcount的值,否则返回的值,否则返回-1-1。fwrite()fwri

9、te()函数的功能:函数的功能:将内存中的一组数据写到将内存中的一组数据写到fpfp所指向的文件中。所指向的文件中。按照按照内存中的存储形式输出,为二进制文件。内存中的存储形式输出,为二进制文件。fwrite(buff, size, count, fp)文件的数据块的读写fread和 fwrite函数从键盘输入n个同学 的学号,姓名和成绩存入文件。#include “stdio.h”typedef struct student STUD;struct student int num; char name12; int score;;例1:文件的数据块写的操作fread(buff, size,

10、count, fp)fread()函数:功能:在fp所指向的文件中读取一组数据并将其放到内存中去。函数调用成功返回count的值,否则返回-1。#include “stdio.h”typedef struct student STUD;struct student int num; char name12; int score;;main() STUD stu; FILE *fp; int i,n; char filename12; scanf(“%s”,filename); if(fp=fopen(filename, “rb”)=NULL) printf(“cant open the fil

11、e!n”);exit(0); 例2:文件的数据块读的操作 fread(&n,2,1,fp); printf(“n=%d”,n); for(i=0; in; i+) if(fread( &stu, sizeof(STUD), 1, fp) != 1 )/*读入一个*/ printf(“file read error!”); exit(0); printf(“%dt%st%dn”,stu.num, , stu.score); fclose(fp); main() STUD stu20; fread(&n,2,1,fp); printf(“n=%d”,n);

12、if(fread( stu, sizeof(STUD) , n , fp ) ! = n )/*读入n个*/ printf(“file read error!”); exit(0); for(i=0; in; i+) printf(“%dt%st%dn”,stui.num, ,stui.score); fclose(fp); 将输出项arg1,arg2argn按指定format格式写入fp所指的文件中,即输出到磁盘文件;格式:fprintf(fp,format,arg1,arg2,argn);格式:fscanf(fp,format,&arg1,&arg2,&a

13、mp;argn);_ fscanf函数_ fprintf函数按指定format格式从fp所指的文件中读取数据依次送入arg1,arg2argn的内存单元;v arg1,arg2,argn(&arg1,&arg2,&argn)输出/输入项表列v format :为格式字符串v fp: 为指向fopen函数打开的文件的指针文件的格式化读写(文本文件)#include “stdio.h”typedef struct student STUD;struct student int num; char name12; int score;;main() STUD stu; FIL

14、E *fp; int i,n; char filename12; scanf(“%s”,filename); 例1:文件的格式化写操作 if(fp=fopen(filename, “w”)=NULL) /*新建一个文件*/ printf(“cant open the file!n”); exit(0); scanf(“%d”,&n); fprintf(fp, “%4d”,n); for(i=0; in; i+) scanf(“%d%s%d”,&stu.num, , &stu.score); fprintf(fp, “%6d%10s%3d”,stu.num

15、, , stu.score); fclose(fp);#include “stdio.h”typedef struct student STUD;struct student int num; char name12; int score;;main() STUD stu; FILE *fp; int i,n; char filename12; scanf(“%s”,filename);例2:文件的格式化读操作 if(fp=fopen(filename, “r”)=NULL) /*新建一个文件*/ printf(“cant open the file!n”); exit(0); fscanf(fp,“%6d”,&n); printf(“n=n”,n); for(i=0; in; i+) fscanf(fp, “%6d%10s%3d”,&stu.num,,&stu.score); printf(“%dt%st%dn”,stu.num,,stu.score); f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论