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;
- stdio.h: C++输入输出操作
- 输入输出函数stdio.h
- C标准库源码解剖(13):输入输出函数stdio.h
- C标准库源码解剖(13):输入输出函数stdio.h
- C语言之常用标准输入输出函数库<stdio.h>
- C语言库stdio.h操作
- stdio.h输入输出头文件
- c library-stdio.h
- C++库函数---<stdio.h>标准输入输出函数
- C语言stdio库(#include<stdio.h>)
- [C标准库] stdio.h
- stdio.h c头文件
- C语言stdio.h和stdlib.h
- C标准库学习stdio.h
- C 语言 stdio.h 库 笔记
- C语言标准库 - stdio.h
- C标准函数库(二)<stdio.h>
- C语言——stdio.h
- HDU
- Java自定义注解Annotation
- iOS In-App Purchase 内购之 问题总结
- 测试
- Kylin v2.0.0开始参数配置规则发生变化
- stdio.h: C++输入输出操作
- GDB layout 命令
- 先码后看 HashMap底层 转侵删
- mysql 1449 : The user specified as a definer ('admin'@'%') does not exist 解决方法
- 欢迎使用CSDN-markdown编辑器
- Fis 打包工具
- MyBatis学习路上打的那些码(三、更多简单的例子)
- RadioButton选中
- Linux压缩、解压文件(随记)