关闭打开的文件 ■fclose函数关闭一个已经打开的函数 ■打开的函数最终都要求调用关闭操作 ■fclosel的参数是由fopen?或freopen返回的已打开 文件的文件指针 o f fclose成功关闭文件后会返回0,否侧返回错误 码EOF(定义在<stdio.h>中的宏) 17
关闭打开的文件 fclose函数关闭一个已经打开的函数 打开的函数最终都要求调用关闭操作 fclose的参数是由fopen或freopen返回的已打开 文件的文件指针 fclose成功关闭文件后会返回0,否则返回错误 码EOF(定义在<stdio.h>中的宏) 17
打开与关闭文件示例 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define FILE NAME "example.dat" 4 int main(void){ 5 FILE *fp; 6 fp fopen(FILE NAME,"r"); 7 if (fp =NULL) 8 printf("Can't open %s\n",FILE_NAME); 9 exit(EXIT FAILURE); 10 11 12 fclose(fp); 13 return 0; 14} 上面6、7行可以合并: if ((fp fopen(FILE NAME,"r"))==NULL)... 18
打开与关闭文件示例 上面6、7行可以合并: if ((fp = fopen(FILE_NAME, "r")) == NULL) … 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define FILE_NAME "example.dat" 4 int main(void) { 5 FILE *fp; 6 fp = fopen(FILE_NAME, "r"); 7 if (fp == NULL) { 8 printf("Can't open %s\n", FILE_NAME); 9 exit(EXIT_FAILURE); 10 } 11 ... 12 fclose(fp); 13 return 0; 14 } 18
挂接新的文件到已打开的流 freopent函数可以把另一个文件挂接到已打开的流之 上,等效于将流重定向到该文件 FILE *freopen(const char restrict filename,const char restrict mode,FILE restrict stream); freopeni函数最典型的用法是将文件挂接到标准流 (stdin,stdout,stderr)上面,使得标准流重定向 下面的freopeni调用使得程序在写入标准输出的同时 也写入文件foo: if (freopen("foo","w",stdout)=NULL){ /error;foo can't be opened freopenj正常的返回值是其第3个函数,如果失败, 会 返回空指针 19
挂接新的文件到已打开的流 freopen函数可以把另一个文件挂接到已打开的流之 上,等效于将流重定向到该文件 FILE *freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream); freopen函数最典型的用法是将文件挂接到标准流 (stdin, stdout, stderr)上面,使得标准流重定向 下面的freopen调用使得程序在写入标准输出的同时 也写入文件foo: if (freopen("foo", "w",stdout) == NULL) { /* error; foo can't be opened */ } freopen正常的返回值是其第3个函数,如果失败,会 返回空指针 19
C99中的freopen ■c99对freopen'做了改进:如果filename是个空指 针,freopen.则试图把stream的模式改为参数设 定的模式 ■具体实现不需要支持这个特性 ■如果具体实现决定支持该特性,它们可以为其 附加其它限制 20
C99中的freopen C99对freopen做了改进: 如果filename是个空指 针, freopen则试图把stream的模式改为参数设 定的模式 具体实现不需要支持这个特性 如果具体实现决定支持该特性,它们可以为其 附加其它限制 20
从命令行参数获得文件名 ■有多种方式为程序提供需打开的文件名 必直接在程序中写死文件名 必提示用户在程序运行时输入文件名 ·从命令行参数获得文件名是更好的办法 ■从命令行获得文件名: demo names.dat dates.dat argv program name n a m e a e 3 21
从命令行参数获得文件名 有多种方式为程序提供需打开的文件名 直接在程序中写死文件名 提示用户在程序运行时输入文件名 从命令行参数获得文件名是更好的办法 从命令行获得文件名: demo names.dat dates.dat 21