stdio.h: C++输入输出操作

来源:互联网 发布:岳阳蔬菜网络销售 编辑:程序博客网 时间:2024/05/29 18:34

头文件:<stdio.h>、<cstdio>

  • 1、通过“streams”来操作物理设备:如键盘、打印机、终端等。

  • 2、流通过指针来连接“FILE”对象,三个自动创建的标准流:stdin, stdout 和 stderr。

指示信息:

  • 1、错误指示:当流操作发生错误是置位,可以通过ferror函数检查,通过 clearerr, freopen 或者 rewind重置。

  • 2、文件结束:读/写到文件结束时置位,可通过feof检查,通过 clearerr/freopen 或者重定位函数(rewind, fseek and fsetpos)置位。

  • 3、位置指示:在读/写操作中,指向流的下一个字符的内部指针。可以通过 ftell and fgetpos获得其值,通过 rewind, fseek and fsetpos 改变其值。

一、文件操作

1、int remove ( const char * filename );

param:filename,文件名(可以包含文件路径)return:若成功,返回0;否则返回非零值
/* remove example: remove myfile.txt */#include <stdio.h>int main (){  if( remove( "myfile.txt" ) != 0 )    perror( "Error deleting file" );  else    puts( "File successfully deleted" );  return 0;}

2、int rename ( const char * oldname, const char * newname );

param:oldname,原文件名(可以包含文件路径); newname,新文件名(可以包含文件路径)return:成功重命名,返回0;否则返回非零。
/* rename example */#include <stdio.h>int main (){  int result;  char oldname[] ="oldname.txt";  char newname[] ="newname.txt";  result= rename( oldname , newname );  if ( result == 0 )    puts ( "File successfully renamed" );  else    perror( "Error renaming file" );  return 0;}

3、FILE * tmpfile ( void );

创建一个临时的二进制文件。自动创建,当流关闭时删除。ret:指向临时文件的流指针;失败返回NULL。
/* tmpfile example */#include <stdio.h>#include <string.h>int main (){  char buffer [256];  FILE * pFile;  pFile = tmpfile ();  do {    if (!fgets(buffer,256,stdin)) break;  //临时缓冲文件流    fputs (buffer,pFile);  } while (strlen(buffer)>1);  rewind(pFile);  while (!feof(pFile)) {    if (fgets (buffer,256,pFile) == NULL) break;    fputs (buffer,stdout);  }  fclose (pFile);  return 0;}

4、char * tmpnam ( char * str );

  • 返回一个文件名(与原来所有文件不同)。

  • 如果str是空指针,返回的字符串存储在静态数组中,可用返回值取得。

  • 如果str不是空指针,将指向至少 L_tmpnam字符的数组,次数组用提到的临时文件名填充

    para:指向字符数组的指针,此字符以C-字符串存储临时文件名。ret:成功,返回指向字符串的指针;如果str为NULL,返回指向内部缓存的指针。失败,返回NULL。
/* tmpnam example */#include <stdio.h>int main (){  char buffer [L_tmpnam];  char * pointer;  tmpnam (buffer);  printf ("Tempname #1: %s\n",buffer);  pointer = tmpnam (NULL);  printf ("Tempname #2: %s\n",pointer);  return 0;  }

二、文件访问

1、int fclose ( FILE * stream );

描述:关闭文件。成功,返回0;失败,返回EOF。

2、int fflush ( FILE * stream );

描述:文件等待更新(读/写),文件将在输出操作后、输入操作前更新。成功,返回0;失败,返回EOF。

/* fflush example */#include <stdio.h>char mybuffer[80];int main(){   FILE * pFile;   pFile = fopen ("example.txt","r+");   if (pFile == NULL) perror ("Error opening file");   else {     fputs ("test",pFile);     fflush (pFile);    // flushing or repositioning required     fgets (mybuffer,80,pFile);     puts (mybuffer);     fclose (pFile);     return 0;  }}

3、FILE * fopen ( const char * filename, const char * mode );

描述:

文件名(C-风格字符串),mode(r,w,a,r+,w+,a+)。

成功,返回指向文件的指针;失败,返回NULL。

4、FILE * freopen ( const char * filename, const char * mode, FILE * stream );

描述:

重新以新的文件名或模式打开流文件。

文件名改变,先关闭原文件,断开流定向;然后重定向流到新的文件。如果文件名为空,改变文件的模式。

如果文件成功重新打开,返回新文件流指针;否则,返回NULL。

/* freopen example: redirecting stdout */#include <stdio.h>int main (){  freopen ("myfile.txt","w",stdout);  printf ("This sentence is redirected to a file.");  fclose (stdout);  return 0;}

5、void setbuf ( FILE * stream, char * buffer );

描述:

流:打开的对象

buffer:使用者申请的buff,至少BUFSIZ bytes。

当文件流指向打开的文件,但无任何读/写操作时使用。

/* setbuf example */#include <stdio.h>int main (){  char buffer[BUFSIZ];  FILE *pFile1, *pFile2;  pFile1=fopen ("myfile1.txt","w");  pFile2=fopen ("myfile2.txt","a");  setbuf ( pFile1 , buffer );  fputs ("This is sent to a buffered stream",pFile1);  fflush (pFile1);  setbuf ( pFile2 , NULL );  fputs ("This is sent to an unbuffered stream",pFile2);  fclose (pFile1);  fclose (pFile2);  return 0;}

6、int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );

描述:

改变流缓存,改变模式和大小。

如果buffer指针为空,自动申请buffer。

/* setvbuf example */#include <stdio.h>int main (){  FILE *pFile;  pFile=fopen ("myfile.txt","w");  setvbuf ( pFile , NULL , _IOFBF , 1024 );  // File operations here  fclose (pFile);  return 0;}

三、格式化输入输出

四、字符输入输出

五、直接输入输出

1、size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

描述:

从流中读取数据块。

读取count元素,每个元素大小为size bytes,从stream保存到内存块ptr。

返回值:成功读取的元素数目。

/* fread example: read an entire file */#include <stdio.h>#include <stdlib.h>int main () {  FILE * pFile;  long lSize;  char * buffer;  size_t result;  pFile = fopen ( "myfile.bin" , "rb" );  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}  // obtain file size:  fseek (pFile , 0 , SEEK_END);  lSize = ftell (pFile);  rewind (pFile);  // allocate memory to contain the whole file:  buffer = (char*) malloc (sizeof(char)*lSize);  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}  // copy the file into the buffer:  result = fread (buffer,1,lSize,pFile);  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}  /* the whole file is now loaded in the memory buffer. */  // terminate  fclose (pFile);  free (buffer);  return 0;}

2、size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

描述:写块数据到流。

写count元素,每个元素大小为size bytes,从内存块ptrstream到stream。

返回值:成功写的元素数目。

/* fwrite example : write buffer */#include <stdio.h>int main (){  FILE * pFile;  char buffer[] = { 'x' , 'y' , 'z' };  pFile = fopen ("myfile.bin", "wb");  fwrite (buffer , sizeof(char), sizeof(buffer), pFile);  fclose (pFile);  return 0;}

六、文件定位

1、int fgetpos ( FILE * stream, fpos_t * pos );

描述:

在流中取回当前的位置。

成功,返回0;失败,返回非0.

/* fgetpos example */#include <stdio.h>int main (){   FILE * pFile;   int c;   int n;   fpos_t pos;   pFile = fopen ("myfile.txt","r");   if (pFile==NULL) perror ("Error opening file");   else   {     c = fgetc (pFile);     printf ("1st character is %c\n",c);     fgetpos (pFile,&pos);     for (n=0;n<3;n++)     {        fsetpos (pFile,&pos);        c = fgetc (pFile);        printf ("2nd character is %c\n",c);     }     fclose (pFile);   }   return 0;}

2、int fseek ( FILE * stream, long int offset, int origin );

重定位流的位置。

offset:从origin开始的字节数。

origin:位置。(SEEK_SET SEEK_CUR SEEK_END)

成功,返回0;失败,返回非0.

如果读/写错误,设置ferror。

/* fseek example */#include <stdio.h>int main (){  FILE * pFile;  pFile = fopen ( "example.txt" , "wb" );  fputs ( "This is an apple." , pFile );  fseek ( pFile , 9 , SEEK_SET );  fputs ( " sam" , pFile );  fclose ( pFile );  return 0;}

3、int fsetpos ( FILE * stream, const fpos_t * pos );

重新存储流的当前位置到pos。成功,返回0;失败,返回非0。

/* fsetpos example */#include <stdio.h>int main (){  FILE * pFile;  fpos_t position;  pFile = fopen ("myfile.txt","w");  fgetpos (pFile, &position);  fputs ("That is a sample",pFile);  fsetpos (pFile, &position);  fputs ("This",pFile);  fclose (pFile);  return 0;}

4、long int ftell ( FILE * stream );

成功,返回当前的位置。失败,返回-1L。

得到流中当前的位置。

/* ftell example : getting size of a file */#include <stdio.h>int main (){  FILE * pFile;  long size;  pFile = fopen ("myfile.txt","rb");  if (pFile==NULL) perror ("Error opening file");  else  {    fseek (pFile, 0, SEEK_END);   // non-portable    size=ftell (pFile);    fclose (pFile);    printf ("Size of myfile.txt: %ld bytes.\n",size);  }  return 0;}

5、void rewind ( FILE * stream );

设置流的位置到begging。

七、异常处理

1、void clearerr ( FILE * stream );

重置error和eof标志。

2、int feof ( FILE * stream );

检查eof标志。

eof置位,返回非零。否则,返回0。

3、int ferror ( FILE * stream );

检查error标志。

4、void perror ( const char * str );

打印错误信息。

八、宏常量

BUFSIZ:缓存大小EOF:文件结尾FILENAME_MAX:文件名的最大长度FOPEN_MAX:同时打开流的极限值L_tmpnam:临时文件名的最小长度NULL:空指针TMP_MAX:临时文件最大数量

九、类型

FILE:控制流的对象fpos_t:文件中的特定位置对象size_t:无符号整型

十、对象

stderr:标准错误流,FILE * stderr;stdin:标准输入流,FILE * stdin;stdout:标准输出流,FILE * stdout;
原创粉丝点击