code:demo17.c(fopen、fwrite、fread、fseek)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// FILE *fopen(const char *path, const char *mode);
// size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
//const void *ptr这里表示什么数据类型都可以
// size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
int main()
{
FILE *fd;
char *str="how learn to LiunxFile programme";
char *readBuf;
readBuf=(char *)malloc(strlen(str));
fd=fopen("./fopen.txt","w+");
fwrite(str,sizeof(char),strlen(str),fd);//写入char个字节*写strlen(str)次,写入大小=sizeof(char)*strlen(str)
fseek(fd,0,SEEK_SET);
fread(readBuf,sizeof(char),strlen(str),fd);
printf("read data is what:%s\n",readBuf);
fclose(fd);
return 0;
}
code:demo18.c(读写的返回值)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *fd;
char *str="how lrean to LiunxFile programme";
char *readBuf;
readBuf=(char *)malloc(strlen(str));
fd=fopen("./fopen.txt","w+");
int n_write = fwrite(str,sizeof(char)*strlen(str),1,fd);//n_write大小与nmemb相关(第三个参数)
fseek(fd,0,SEEK_SET);
int n_read = fread(readBuf,sizeof(char)*strlen(str),1,fd);//n_read大小与nmemb相关(第三个参数,如果nmemb给多了按照写入nmemb大小的计算)
printf("read data is what:%s\n",readBuf);
printf("n_write:%d,n_read:%d\n",n_write,n_read);
fclose(fd);
return 0;
}
运行结果:
CLC@Embed_Learn:~/LinuxLearn/FILE$ ./a.out
read data is what:how lrean to LiunxFile programme
n_write:1,n_read:1
code:demo19.c( 参数size_t size、 size_t nmemb与demo18.c的区别)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *fd;
char *str="how lrean to LiunxFile programme";
char *readBuf;
readBuf=(char *)malloc(strlen(str));
fd=fopen("./fopen.txt","w+");
int n_write = fwrite(str,sizeof(char)*strlen(str),1,fd);
fseek(fd,0,SEEK_SET);
int n_read = fread(readBuf,sizeof(char),100,fd);
printf("read data is what:%s\n",readBuf);
printf("n_write:%d,n_read:%d\n",n_write,n_read);
fclose(fd);
return 0;
}
运行结果:
CLC@Embed_Learn:~/LinuxLearn/FILE$ ./a.out
read data is what:how lrean to LiunxFile programme
n_write:1,n_read:32
code:demo20.c(写入读取结构体)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Test
{
int a;
char c;
};
int main()
{
FILE *fp;
struct Test data1={97,'a'};
struct Test data2;
fp=fopen("./file","w+");//in "w+"not can have "kongge "
int wrByt=fwrite(&data1,sizeof(struct Test),1,fp);
fseek(fp,0,SEEK_SET);
int rdByt=fread(&data2,sizeof(struct Test),1,fp);
printf("read data2:%d,%c\n",data2.a,data2.c);
fclose(fp);
return 0;
}
运行结果:
CLC@Embed_Learn:~/LinuxLearn/FILE$ ./a.out
read data2:97,a
code:demo22.c(fputc)
#include <stdio.h>
#include <string.h>
// int fputc(int c, FILE *stream);
// int fputs(const char *s, FILE *stream);
int main()
{
FILE *fp;
int i;
char *str ="Liunx file lrean , come on";
int len = strlen(str);
fp=fopen("./file.txt","w+");
for(i=0;i<len;i++){
fputc(*str,fp);//每次写一个字符,直到结束
str++;
}
fclose(fp);
return 0;
}
运行结果:
CLC@Embed_Learn:~/LinuxLearn/FILE$ ./a.out
CLC@Embed_Learn:~/LinuxLearn/FILE$ cat file.txt
Liunx file lrean , come on
code:demo23.c(feof、fgetc)
CLC@Embed_Learn:~/LinuxLearn/FILE$ cat file.txt
Liunx file lrean , come onCLC@Embed_Learn:~/LinuxLearn/FILE$ vi file.txt
CLC@Embed_Learn:~/LinuxLearn/FILE$ cat demo23.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char c;
fp=fopen("./file.txt","r");
if(fp == NULL){
printf("Not find file : file.txt\n");
exit(-1);
}
while(!feof(fp))//feof没有到达文件末尾时返回值为0,到达末尾返回值为非0
{
//int fgetc(FILE *stream);
c=fgetc(fp);//fgetc每次读取一个字符并移动一个光标
printf("%c",c);
}
return 0;
}
运行结果:
CLC@Embed_Learn:~/LinuxLearn/FILE$ ./a.out
Liunx file lrean , come on