
#include <stdio.h>

/*

* FILE // fopen, getc, putc, fclose // stdin, stdout, stderr // NULL

*(1) FILE *fp; //file pointer

*(2) FILE *fopen(char *fileName, char *mode); // fp = fopen (fileName, mode);

*(3) read ("r"), write ("w"), append ("a")

*(4) 为了区分 text文件和binary文件,可以在以上三种打开方式后面加上 "b" (binary file)

*(5) 若"a"或者"w"时,若这个文件不存在,将会新创建(create)一个文件

*(6) 若文件已存在,当"a"时,文件以前的内容将保留;若"w"时,将覆盖。

*(7) fopen打开文件失败时,回返回NULL指针,原因可能是"r"读一个不存在的文件,或者权限不够

*(8) 当c程序执行时,OS负责打开三个标准文件指针,分别为stdin, stdout, stderr

*/

//int getc(FILE *fp)读fp指向stream的下一个字符,当文件结尾或出错时,返回EOF。

//int putc(char ch, FILE *fp)向fp中写入一个字符,并返回该字符,出错时返回EOF。

//#define getchar() getc(stdin)

//#define putchar(c) putc(c, stdout)

void fileCopy(FILE *sourceFile, FILE *targetFile){

int ch;

while((ch = getc(sourceFile)) != EOF)

putc(ch, targetFile);

}

int main( int argc, char** argv) {

FILE *sourceFile, *targetFile;

char *sourceFileName = "source.txt", *targetFileName = "target.txt";

if((sourceFile = fopen(sourceFileName, "rb")) == NULL){

printf( "Error: can't open %s\n", sourceFileName);

} else if((targetFile = fopen(targetFileName, "ab")) == NULL){

printf( "Error: can't open %s\n", targetFileName);

}

//stdout 标准输出文件 FILE *fp

if((sourceFile != NULL)&&(targetFile != NULL)){

fileCopy(sourceFile, targetFile);

//fileCopy(sourceFile, stdout); //如果把这行打开,stdout将无显示,

//原因是sourceFile指针已经到了文件尾了

}

//关闭文件指针 fclose(FILE *fp)

fclose(sourceFile);

fclose(targetFile);

return 0;

}