// FILE(文件):记录了一些操作文件的信息 
#include <stdio.h> // 标准的输入输出头文件
// 变量名:见名xx 
#include <stdlib.h>

int main()
{
	FILE* fp;

	// Linux 
	// 	    文件名     模式 
	// 文件路径:绝对路径和相对路径 

	// 相对路径 
	fp = fopen("hello.txt", "a"); // 写 
	
	if (fp == NULL) // 如果打开文件失败(只可读/文件不存在),返回NULL 
	{
		printf("打开文件失败");
		exit(1); // 非正常运行导致退出程序 exit(0)退出 
	}
	
//	fgetc() // 读字符 
	char a, b, c;
	int d;
//	fscanf(fp,"%c%c%c%d",&a,&b,&c,&d); // 读字符串 
//	printf("%c%c%c%d", a, b, c, d);
	fprintf(fp, "666"); // 写字符串 
	fclose(fp); // 回收内存  
	return 0;
	
	
	// 1.声明一个文件指针
	// 2.打开文件 fopen()
	// 3.操作文件(读/写/覆盖写/追加写)
		// r:读模式,如果文件不存在,返回NULL指针 
		// w:写模式,如果文件存在,文件内容被覆盖,如果文件不存在,则会创建文件 
		// a:写模式,如果文件存在,追加写,如果文件不存在,则创建文件
		// r+:读写模式,如果文件存在,指针指向文件开始处,可以在头部添加数据
					//  如果文件不存在,返回NULL指针
		// w+ 读写模式,如果文件存在,文件内容被覆盖,然后再写入数据。
				// 如果文件不存在,则创建该文件。  
				// 这种模式实际上读不到数据,反而会擦掉数据。
		// a+:读写模式。如果文件存在,指针指向文件结尾,可以在现有文件末尾添加内容。
			// 如果文件不存在,则创建该文件。
	// 4.关闭文件 
	
	
	// 定位到文件开始处, fseek(fp, 0L, SEEK_SET);
	// 定位到文件末尾,fseek(fp, 0L, SEEK_END);
	// 从当前位置后移2个字节, fseek(fp, 2L, SEEK_CUR);
	// 定位到文件第10个字节, fseek(fp, 10L, SEEK_SET);
	// 定位到文件倒数第10个字节,fseek(fp, -10L, SEEK_END);
	// fseek()的第二个参数为 long 类型,所以移动距离必须加上后缀L,将其转为 long 类型。
	
	
	// rename()函数用于文件改名,也用于移动文件。
	// int rename(const char* old_filename, const char* new_filename); 
}