前言:open与fopen的区别
fopen是标准C库,在不同的系统中调用不同的API,有良好的移植性
open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符,移植有限
fwrite函数
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
const void *ptr:文件缓冲区
size_t size:字符的大小
size_t nmemb:字符的个数
FILE *stream:存放文件地址
fread函数与上述同理
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char *ptr = "I from China";
char *readBuf;
readBuf = (char *)malloc(sizeof(char));
fp = fopen("./six.c","w+");
fwrite(ptr,sizeof(char),strlen(ptr),fp);
// fwrite(ptr,sizeof(char)*strlen(ptr),1,fp); 与上述输出结果相同
fseek(fp,0,SEEK_SET);
fread(readBuf,sizeof(char),strlen(ptr),fp);
// fread(readBUF,sizeof(char)*strlen(ptr),1,fp); 与上述输出结果相同
printf("read %s\n",readBuf);
fclose(fp);
return 0;
}
//效果 read I from China
补充:n_write的返回值是靠第三个位置进行判断
int n_write = fwrite(ptr,sizeof(char),strlen(ptr),fp); //n_write = strlen(ptr)
int n_write = fwrite(ptr,sizeof(char)*strlen(ptr),1,fp); //n_write = 1
int n_write = fwrite(ptr,sizeof(char)*strlen(ptr),100,fp);
int n_read = fread(ptr,sizeof(char)*strlen(ptr),100,fp);
不同点在于:
n_write 写入次数为100次,而n_read读取有效的次数就会终止
//fopen fwrite fread fclose 结合运用
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
struct test
{
int a;
char c;
};
int main()
{
FILE *fp;
struct test data1 = {100,'a'};
struct test data2;
fp = fopen("./file","w+");
int n_write = fwrite(&data1,sizeof(struct test),1,fp);
fseek(fp,0,SEEK_SET);
int n_read = fread(&data2,sizeof(struct test),1,fp);
printf("read %d %c\n",data2.a,data2.c);
fclose(fp);
return 0;
}