C-输入输出与文件操作

1.       输入输出函数

字符的输入输出

C语言标准库提供了一次输入一个字符的函数getchar和一次输出一个字符的函数putchar

Getchar的引用形式为:ch=getchar(),用于从标准输入设备(终端)上读入并返回一个字符。

Putchar函数的引用形式为putcharch),它把字符ch送到标准输出设备(终端屏幕)上去。

例子:

Int c;

While ((c=getchar()!=EOF)

Putchar c;

字符串输入输出

C函数提供了getsputs用来完成这个工作。

gets接收字符串直到遇到回车符’/n’时为止,并以一个’/0’代替’/n’scanf遇到空白符(空格,制表和换行符)都停止接收后面的字符。

格式输出

格式输出函数printf的一般形式为printf(控制字符串,参数1,参数2…

格式输入

格式输入用scanf函数实现,其一般形式为(控制字符串,参数1,参数2…

 

2. 缓冲文件系统

所谓缓冲文件系统是指:系统自动地为每个正在使用的文件开辟一个缓冲区,从内存向磁盘存数据或从磁盘向内存存取数据都通过这个缓冲区。

而非缓冲区文件系统是指:系统不自动为文件开辟缓冲区,而由程序自己为所需的文件开辟缓冲区。

1)        打开和关闭文件

打开文件用函数fopen完成,其一般形式为FILE *fp; fp=fopen(文件名,文件使用方式)

这里的FILE是一个存放文件属性的结构,在studio.h中定义,fp定义为指向文件结构的指针。函数fopen以指定的方式打开文件,如fpfopen(“file1”,”r”); 以读方式打开文件file1.

 

文件的关闭很简单,只需要写fclosefp);

2)        文件的读写

a)        getc putc

getc的引用形式为ch=getc(fp);这里的fp是调用fopen时的返回值,getcfp所指的文件中读取一个字符返回,当读到文件尾时返回文件结束标志EOF

Putc调用形式为putcchfp);这里的fp是调用fopen时的返回值,putc将字符ch写到fp指向的文件中去。

b)        fscanffprintf

fscanffprintf很像scanfprintf,只是它们对文件进行读写,而不是对标准输入输出设备金溪国内读写。

c)         freadfwrite

这两个函数是ANSIC新增加的,可以读写一个数据块,一般调用形式为

fread(buffer, size, count, fp);

fwrite(buffer,size, count, fp);

其中buffer是一个指针,对fread而言,它指向存放读入数据的缓冲区,对于fwrite而言,它指向要写入文件的数据所存放的缓冲区。

Size是一次要读写多少项。

Count是要读写多少项。

fp是指向文件的指针。

 

Note:

ANSI C 是美国 American National Standards Institute (ANSI) 出版的C语言标准。凡只用ANSI C 写的程序,所有编译器,MS VC++, Turbo C 等都支持。Turbo C 除支持ANSI C外,还增加了许多别的东西(别的库函数),例如绘图函数。TC 的绘图函数 TC 支持, 别的编译器不支持。同样 MS VC++  增加的绘图函数,TC 不支持。可以说 ANSI C 是基础的 简单的标准的  C,其它的 C 是扩充扩展了的C.

3)   标准的输入输出文件

C程序开始执行时,系统自动打开三个文件:标准输入(stdin),标准输出(stdout)和标准错误输出(stderr)。

4)   文件的随机访问

C语言中用fseek实现文件随机读写的功能,fseek的一般调用形式为

fseek(fp, offset, origin); 其中,fp是指向文件的指针。

origin是起始点,可以取三个值,为0时表示从文件起始位置开始,为1时表示从文件当前位置开始,为2时表示从文件尾部开始。

Offset是一个位移量,它表示从起始点(origin)移动的字节数。它是一个long型数据,这样保证当文件长度超过64k时不致于出问题。

 

例子:将文件data中的内容反序输出。(没有弄清楚)

include studio.h”

Main()

{

FILE *fp;

If (fp=fopen(“data”, “r”))==NULL)

{

Printf(stderr,”can not open file./n”);

exit(1);

}

fseek(fp,-3L,2); /*将位置指针置于文件中最后一个有效字符处。*/

putchar(getc(fp));

while(fseek(fp,-2L,1)==0)/*倒退一个字符*/

putchar(getc(fp));

}

3.非缓冲文件系统

非缓冲文件系统是基于UNIX的,ANSI标准不包含这部分内容。

1)      Open函数

Open函数用于打开文件,其调用形式为:

int fd

fdopen(文件名,打开模式);

open用返回较小的整数fd(称为文件描述字)来标识打开的文件,当打开失败时返回-1。打开模式取三种值:0表示为读打开,1表示为写打开,2表示为读写打开。

2)      creat 函数

creat函数用来创建一个新文件,如果文件已经存在,则creat使文件中原来的内容全部丢失,其调用方式因系统而异,TurboC调用形式为:

fdcreat(文件名,打开格式);

当文件创建失败返回-1

3)      Close函数

Close用于关闭文件,其一般形式为:closefd;

fd 是调用creatopen时返回时文件描述字。

4)      Read 函数

read的作用时从指定的文件中读取若干个字符到程序开辟的缓冲区,其一般调用形式为:

nreadfdbufcount);

fd是文件描述字,buf是指向用户开辟的缓冲区的指针,count是要求读入的字节数,read是返回真正读入的字节数,文件结束时返回0,出错时返回-1

5)      write函数

write用于从指定的内存缓冲区将若干个字节的内容写到指定的文件中去,其一般调用式为:

nwritefdbufcount);

其中fd式文件描述字,buf是指向存放要输出数据的缓冲区的指针,count是要输出的字节数。返回值应于count相同,不同时意味着又某种错误出现。

例子:显示文件的内容

define SIZE 512

main (argc, argv)

int argc;

char *argv[];

{

Char buf[SIZE];

Int fd,n;

if (argc!=2){

                                                               i.      printf(“Usage:type file./n”);

                                                             ii.      exit(1);

}

if ((fd=open(argv[1],0))==-1){

printf(“can not open %s/n”, argv[1]);

exit(1);

}

while ((n=read=(fd, buf, sizeof(buf))>0)

write(1, buf, n);

exit(0)

}

 

 

 

 

 

你可能感兴趣的:(c,File,buffer,FP,编译器,Standards)