linux下关于文件操作记录

使用MT7688跑的openwrt系统做了一个控制器,已经在项目上应用,程序功能还可以继续完善,有兴趣的可以看看智能控制器参数说明,通过485的接口可以使用协议转换器来控制舞台灯具,协议转换器可以看看这个链接:485协议转换器参数说明​​​​​​​

Linux的fopen函数详解

fopen(打开文件)

相关函数 open,fclose
表头文件 #include<stdio.h>
定义函数 FILE * fopen(const char * path,const char * mode);
函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消
失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容
会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,
如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会
被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文
件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的
内容会被保留。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组
合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯
文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen
()所建立的新文件会具有
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。

附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

Linux下C语言的文件(fputc,fgetc,fwrite,fread对文件读写操作)的例子:
//
fputc 向文件写入字符
#include <stdio.h>
#include <stdlib.h>
main()
{
  FILE *fp;
  char ch;
  if((fp=fopen("test.txt","w"))==NULL)
  {  
    printf("不能打开文件\n");
  exit(0);
  }
  while ((ch=getchar())!='\n')
  fputc( ch, fp );
  fclose(fp);
}
-------------
小提示:
fp=fopen("test.txt","w") ,把"w"改为 "a" 可以创建文件并且追加写入内容
exit(0);  需要包含 stdlib.h 头文件,才能使用
//
fgetc 读取字符
#include <stdio.h>
#include <stdlib.h>
main( int argc, char *argv[] )
{
  char ch;
  FILE *fp;
  int i;
  if((fp=fopen(argv[1],"r"))==NULL)
  {
    printf("不能打开文件\n");
    exit(0);
  }
  while ((ch=fgetc(fp))!=EOF)
  putchar(ch);
  fclose(fp);
}
文件结尾,通过判断 EOF
//
fwrite 的使用
使数组或结构体等类型可以进行一次性读写
#include <stdio.h>
#include <stdlib.h>
main()
{
  FILE *fp1;
  int i;
  struct student{
  char name[10];
  int age;
  float score[2];
  char addr[15];
  }stu;
  if((fp1=fopen("test.txt","wb"))==NULL)
  {
    printf("不能打开文件");
    exit(0);
  }
    printf("请输入信息,姓名 年龄 分数1 分数2 地址:\n");
  for( i=0;i<2;i++)
  {
    scanf("%s %d %f %f %s",stu.name,&stu.age,&stu.score[0],&stu.score[1], stu.addr);
    fwrite(&stu,sizeof(stu),1,fp1);
  }
  fclose(fp1);
}
//
fread 的使用
#include <stdio.h>
#include <stdlib.h>
main()
{
  FILE *fp1;
  int i;
  struct student{
    char name[10];
    int age;
    float score[2];
    char addr[15];
  }stu;
  if((fp1=fopen("test.txt","rb"))==NULL)
  {
    printf("不能打开文件");
    exit(0);
  }
  printf("读取文件的内容如下:\n");
  for (i=0;i<2;i++)
  {
    fread(&stu,sizeof(stu),1,fp1);
    printf("%s %d %7.2f %7.2f %s\n",stu.name,stu.age,stu.score[0],stu.score[1],stu.addr);
  }
  fclose(fp1);
}
//
fprintf , fscanf, putw , getw , rewind , fseek 函数
这些函数的话我就不演示了 ,
这些函数基本都一对来使用,例如 fputc 和 fgetc 一起来用.
//
fputc 向文件写入字符
#include <stdio.h>
#include <stdlib.h>
main()
{
  FILE *fp;
  char ch;
  if((fp=fopen("test.txt","w"))==NULL)
  {  
    printf("不能打开文件\n");
  exit(0);
  }
  while ((ch=getchar())!='\n')
  fputc( ch, fp );
  fclose(fp);
}
-------------
小提示:
fp=fopen("test.txt","w") ,把"w"改为 "a" 可以创建文件并且追加写入内容
exit(0);  需要包含 stdlib.h 头文件,才能使用
//
fgetc 读取字符
#include <stdio.h>
#include <stdlib.h>
main( int argc, char *argv[] )
{
  char ch;
  FILE *fp;
  int i;
  if((fp=fopen(argv[1],"r"))==NULL)
  {
    printf("不能打开文件\n");
    exit(0);
  }
  while ((ch=fgetc(fp))!=EOF)
  putchar(ch);
  fclose(fp);
}
文件结尾,通过判断 EOF
//
fwrite 的使用
使数组或结构体等类型可以进行一次性读写
#include <stdio.h>
#include <stdlib.h>
main()
{
  FILE *fp1;
  int i;
  struct student{
  char name[10];
  int age;
  float score[2];
  char addr[15];
  }stu;
  if((fp1=fopen("test.txt","wb"))==NULL)
  {
    printf("不能打开文件");
    exit(0);
  }
    printf("请输入信息,姓名 年龄 分数1 分数2 地址:\n");
  for( i=0;i<2;i++)
  {
    scanf("%s %d %f %f %s",stu.name,&stu.age,&stu.score[0],&stu.score[1], stu.addr);
    fwrite(&stu,sizeof(stu),1,fp1);
  }
  fclose(fp1);
}
//
fread 的使用
#include <stdio.h>
#include <stdlib.h>
main()
{
  FILE *fp1;
  int i;
  struct student{
    char name[10];
    int age;
    float score[2];
    char addr[15];
  }stu;
  if((fp1=fopen("test.txt","rb"))==NULL)
  {
    printf("不能打开文件");
    exit(0);
  }
  printf("读取文件的内容如下:\n");
  for (i=0;i<2;i++)
  {
    fread(&stu,sizeof(stu),1,fp1);
    printf("%s %d %7.2f %7.2f %s\n",stu.name,stu.age,stu.score[0],stu.score[1],stu.addr);
  }
  fclose(fp1);
}
//
fprintf , fscanf, putw , getw , rewind , fseek 函数
这些函数的话我就不演示了 ,
这些函数基本都一对来使用,例如 fputc 和 fgetc 一起来用.

<strong>创建文件夹的例子:</strong>
#include <sys/types.h>
#include <sys/stat.h>


int status;


int main(void)
{
	status = mkdir("/mnt/mmcblk0/myFrist", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);//如果没有这个文件夹,就创建一个
}
	status = mkdir("/mnt/mmcblk0/myFrist", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);//如果没有这个文件夹,就创建一个
}


发布了47 篇原创文章 · 获赞 28 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/x13163303344/article/details/74276046