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);//如果沒有這個文件夾,就創建一個
}


 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章