前言
此部分为C语言在Linux下编程的文件相关操作
一、使用C语言库函数打开关闭文件
- FILE *fopen( const char * filename, const char * mode );
- int fclose(FILE *fp);
二、文本文件文件读取与写入
- 写入文本文件
- int fprintf(FILE *fp, const char *format, …);
/*此程序用于尝试写入文本文件
*作者:zhy 时间:2020 1 21
*/
#include <stdio.h>
int main(int argc,char* argv[])
{
int i=0;
FILE *fp=0;
if((fp=fopen("/home/homeboy/public/test.txt","w"))==0)
{
printf("error!\n");
return -1;
}
while(i!=5)
{
fprintf(fp,"=%d=yaho,minasang,matsuri(马自立)desuyo\n",i);
i++;
}
fclose(fp);
return 0;
}
- 读取文本文件
- char *fgets(char *buf, int size, FILE *fp);
/*此程序用于演示文本文件的读取
* 作者:zhy 时间:2020 1 22
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{
FILE *fp=NULL; //定义文件变量指针
char strbuf[301]; //存放从文件中读取的一行的内容
if(argc!=2)
{
printf("\n此程序用于演示文本文件的读取\n\
用法:将需要打开的文件路径作为参数 \n\
例如: ./book10 /home/homeboy/public/test.txt \n");
return -1;
}
memset(strbuf,0,sizeof(strbuf));
//以只读的方式打开文件
if((fp=fopen(argv[1],"r"))==0)
{
printf("error!\n");
return -1;
}
//逐行读取文件的内容输出到屏幕
while(1)
{
if(fgets(strbuf,301,fp)==0) break;
printf("=%s=",strbuf);
}
fclose(fp);
}
三、二进制文件文件读取与写入
- 写入数据
- size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
/*
* 此程序演示二进制文件的写入
* 作者:zhy 时间:2020 1 22
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct str_girl
{
char name[50]; //姓名
int age; //年龄
int height; //身高 单位:厘米
char app[20]; //相貌
char ww[20]; //身材
}str_girl;
int main(int argc,char *argv[])
{
str_girl girlone; //定义结构体实例
FILE *fp=NULL; //定义文件指针变量
//以只写方式打开二进制文件
if((fp=fopen("/home/homeboy/public/date.dat","w"))==0)
{
printf("error!\n");
return -1;
}
//为结构体赋值
strcpy(girlone.name,"夏色祭");
strcpy(girlone.app,"可爱");
strcpy(girlone.ww,"砧板");
girlone.age=17;
girlone.height=155;
fwrite(&girlone,1,sizeof(girlone),fp);
fclose(fp);
return 0;
}
- 读取数据
- size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
/*
* 此程序演示二进制文件的读取
* 作者:zhy 时间:2020 1 22
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct str_girl
{
char name[50]; //姓名
int age; //年龄
int height; //身高 单位:厘米
char app[20]; //相貌
char ww[20]; //身材
}str_girl;
int main(int argc,char *argv[])
{
str_girl girlone; //定义结构体实例
FILE *fp=NULL; //定义文件指针变量
//以只写方式打开二进制文件
if((fp=fopen("/home/homeboy/public/date.dat","r"))==0)
{
printf("error!\n");
return -1;
}
fread(&girlone,1,sizeof(girlone),fp);
printf("name=%s=\n",girlone.name);
printf("age=%d=\n",girlone.age);
printf("height=%d=\n",girlone.height);
printf("app=%s=\n",girlone.app);
printf("ww=%s=\n",girlone.ww);
fclose(fp);
return 0;
}
四、文件其他操作
- 把缓冲区的数据立即写入文件
int fflush(FILE *fp);
- ftell函数用来返回当前文件位置指针的值
clong ftell(FILE *fp);
- rewind函数用来将位置指针移动到文件开头
void rewind ( FILE *fp );
- fseek() 用来将位置指针移动到任意位置
int fseek ( FILE *fp, long offset, int origin );
- offset 为偏移量,也就是要移动的字节数。之所以为 long 类型,是希望移动的范围更大,能处理的文件更大。offset 为正时,向后移动;offset 为负时,向前移动。
- origin 为起始位置,也就是从何处开始计算偏移量。C语言规定的起始位置有三种,分别为:0-文件开头;1-当前位置;2-文件末尾。