#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* fp = fopen("a.txt","w");
FILE*fp1 = fopen("b.txt","a+");
FILE*fp2 = fopen("b.txt","r");
if(fp1==NULL) perror(""),exit(-1);
/*
r read --> 文件不存在,fp=NULL 文件偏移量 0
w write --> 文件不存在,就创建。文件存在则截断。
a append --> 追加,文件偏移量为文件的大小。
r+ read write 文件不存在,fp=NULL,
w+ 创建,截断。
a+ read write 文件偏移量 0,未截断。但是写时以追加方式。
b rb wb ab rb+ wb+ ab+
*/
printf("%ld", ftell(fp));
char buf[5];
strcpy(buf,"abcd");
fwrite(buf,strlen(buf),1,fp1);
//将值写进fp1中去。
/*
*/
printf("%ld\n", ftell(fp1));
printf("%ld\n",ftell(fp2));
//feof ferror
//strcpy(buf,"");
printf("%s\n",buf);
memset(buf,0,sizeof(buf));
int i = 0;
while((i = getc(fp2))!=EOF)//getc的返回值是int型。这是因为当EOF时,系统返回的时4字节的int类型的-1。类似的还包括getchar,fgetc
{
/*注意feof函数是探测是否是已经走到文件末尾,当fread函数时,虽然偏移量位置已经到了文件EOF上。比如说前一次读时没有遇到EOF符,读了之后,文件偏移量正好移到了EOF上,但是fp2此时并未设置成已到达文件尾。feof是判断fp2的标志位,如果标志位被设置成了已到文件末尾。就为真。*/
ungetc(i,fp2);
memset(buf,0,sizeof(buf));
fread(buf,sizeof(buf)-1,1,fp2);
printf("hell%s\n",buf);
// printf("%ld",ftell(fp2));
}
printf("%d\n",i);
fseek(fp1,0,SEEK_SET);
printf("%ld",ftell(fp1));
fprintf(fp1,"good morning%s","hello");//用fprintf始终将偏移量移到文件末尾。以追加方式进行写
printf("%ld",ftell(fp1));
fprintf(fp1,"%d",100);
fseek(fp1,-3,SEEK_END);
fscanf(fp1,"%d",&i); //用fscanf可以改变文件偏移量
printf("%d\n",i);
}