#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//使用宏定义文件名,,注“”双引号(源自预编译对宏的“简单替换”)
#define FILE_NAME"/users/qianfeng/macro/date.txt"
//使用宏对打开模式,,注“”双引号(源自预编译对宏的“简单替换”,可参考博客:预处理编译-宏-define)
//fopen(char* address,char* ch_enable);
//{"r"(用于读)/"r+"(用于读写,从文件头开始)}当文件不存在报错
//{/"w"/"w+"(文件存在就截去)/“a”/"a+"(用于文件追加)}当文件不存在自动创建
#define OPEN_MODE"w+"
int main(){
//fopen打开文件,//缓冲区有关联,
//缓冲区是由操作系统OS位当前运行程序自动分配,有大小限制的
//读缓冲/写缓冲
FILE* fp =NULL;
char str[512];
//打开文件,参数为开始定义的宏
fp = fopen(FILE_NAME,OPEN_MODE);
//判断文件是否为空:
if (fp==NULL) {
perror("date.txt");
exit(-1);
}
else printf("%p\n",fp);
//向文件中写入数据“hello world”
//如果上方的打开方式为读,则此处无法成功写入
fprintf(fp,"helloxxwzorld\n");
//读取数据:
//光标置为0位,
rewind(fp);
//从第0个字符向后偏移6个字符;
//最终光标应该偏移到第(0+6)字符的前面。
fseek(fp,6,0);
//查找目前光标位置:
long position = ftell(fp);
printf("position = %ld\n",position);
//把数据写入str[]
fscanf(fp,"%[^\n]",str);
//读取str[]
printf("%s\n",str);
//在文件的真正结尾是”EOF“,在此之前还有个换行符”\n“
//输入:scanf(),gets(),getchar
//scanf();每次根据自己的类型从缓存区中去数据,不符合则不取,取值成功返回值为:1
//否则为:0
//输出:printf(),puts()
char buffer[512] ="this is buffer";
printf("fget = ");
//fgets(<#char *restrict#>, <#int#>, <#FILE *#>),第一个参数:存储指针,
//第二个参数:输入多少个字符串(包括结束标示“\0”),第三个参数:文件指针,(stdin表示键盘文件,从键盘录入数据);
fgets(buffer, 10,stdin);
puts(buffer);
fputc(1, fp);
//清理文件的缓冲区
fflush(fp);
//关闭文件
fclose(fp);
return 0;
/*
输出:
0x7fff7df3c2a0
position = 6
xwzorld
fget = fgdsfg
fgdsfg
Program ended with exit code: 0
*/
}