一.fopen()与open()二者区别
参考文章连接:https://www.cnblogs.com/NickyYe/p/5497659.html
二.使用标准c库函数写入字符串到文件
1.代码实现:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
// FILE *fopen(const char *pathname, const char *mode);
FILE *fp;
fp = fopen("./kun.txt", "w+");
// size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
//1.char *str(缓冲区)
//2.sizeof(char)
//3.字符串元素个数
//4.文件流fp
char *str = "kobe bryant";
fwrite(str, sizeof(char), strlen(str), fp);
//fwrite(str, sizeof(char)*strlen(str), 1, fp); //在不调用fwrite()返回值的时候,第二个和第三个参数切换没有影响
// int fseek(FILE *stream, long offset, int whence);
fseek(fp, 0, SEEK_SET); //注意在fead()前记得要将光标前置文件首,否则reaBuf[128]里面没有数据
// size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
char readBuf[128] = {0};
fread(readBuf, sizeof(char), strlen(str), fp);
//fread(readBuf, sizeof(char)*strlen(str), 1, fp); //同fwrite,不调用返回值的时候,第二个参数、第三个参数可以灵活切换
printf("read: %s\n", readBuf);
return 0;
}
2.运行结果
3.生成的文本文件
4.关于fwrite()、fread()返回值补充
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
// FILE *fopen(const char *pathname, const char *mode);
FILE *fp;
fp = fopen("./kun.txt", "w+");
// size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
//1.char *str(缓冲区)
//2.sizeof(char)
//3.字符串元素个数
//4.文件流fp
char *str = "kobe bryant";
int nwrite = fwrite(str, sizeof(char), strlen(str), fp); //调用fwrite()返回值的时候,不管size的大小是否等于1,nwrite的值等于第三个参数
//int nwrite = fwrite(str, sizeof(char)*strlen(str), 1, fp);
// int fseek(FILE *stream, long offset, int whence);
fseek(fp, 0, SEEK_SET); //注意在fead()前记得要将光标前置文件首,否则reaBuf[128]里面没有数据
// size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
char readBuf[128] = {0};
int nread = fread(readBuf, sizeof(char), strlen(str), fp); //这里第二个参数size大小为sizeof(char)=1,nread就等于第三个参数的值
int nread = fread(readBuf, sizeof(char)*strlen(str), 1, fp); //当第二个参数size大小不等于1时,它的值跟第三个参数没有直接联系
printf("context: %s\nread: %d, write: %d\n", readBuf, nread, nwrite);
return 0;
}
PS:这里对fwrite()、fread()返回值Linux函数手册的说明如下
?红色箭头部分强调只有当两个函数第二个参数size值为1的时候,其返回值才等于传递的字节数,同时对于fwrite()返回值而言,无论size大小是否为1,其返回值都等于第三个参数大小;这与fread()返回值有区别,区别可见代码注释部分。
三.标准c库写入结构体到文件
1.代码实现
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
struct Student
{
int a;
char c;
};
int main(int argc, char *argv[])
{
FILE *fp;
struct Student data = {81, 'v'};
struct Student data2;
fp = fopen("./kun2.txt", "w+");
fwrite(&data, sizeof(struct Student), 1, fp);
fseek(fp, 0, SEEK_SET);
fread(&data2, sizeof(struct Student), 1, fp);
printf("read: %d, %c\n", data2.a, data2.c);
fclose(fp);
return 0;
}
2.运行结果
3.生成文件
?
|