色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 標(biāo)準(zhǔn)IO 中對(duì)文件的基本操作

標(biāo)準(zhǔn)IO 中對(duì)文件的基本操作 時(shí)間:2018-01-09      來源:未知

對(duì)于Linux程序員來說,對(duì)文件的IO操作是應(yīng)用編程的基礎(chǔ)內(nèi)容,也是必須掌握的技能;下面作者通過兩個(gè)基本概念和四個(gè)函數(shù),來解析對(duì)文件的基本操作;

首先要明白兩個(gè)基本的概念;文件和IO;

1.文件:文件指的是同類型數(shù)據(jù)的集合; 在linux中有一個(gè)重要思想;一切皆文件;也是說在Linux系統(tǒng)中把所有的文件、設(shè)備、內(nèi)存等都當(dāng)做文件來看待;因?yàn)檫@個(gè)思想的存在,所有在Linux系統(tǒng)中對(duì)設(shè)備及文件的操作方式都是一樣的。Linux中把文件分為七種類型,分別是普通文件、設(shè)備文件(塊設(shè)備和字符設(shè)備)、目錄文件、管道文件、鏈接文件(符號(hào)鏈接文件),套接字;我們主要以普通文件來學(xué)習(xí);

2. IO: IO是input和output的簡(jiǎn)寫,也就是指的輸入和輸出;對(duì)于Linux系統(tǒng)來講;輸入及輸出主要是從程序的角度來看的,因?yàn)槌绦騿T的主要的工作就是使用程序來處理數(shù)據(jù); 所以輸入指的就是把數(shù)據(jù)輸入到程序中,輸出值指的是從程序中輸出數(shù)據(jù);一般情況下,輸入主要使用鍵盤,鍵盤也叫標(biāo)準(zhǔn)輸入,而輸出的結(jié)果主要顯示在屏幕上,屏幕也就是標(biāo)準(zhǔn)輸出;除了標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出外,還有一個(gè)標(biāo)準(zhǔn)文件——標(biāo)準(zhǔn)錯(cuò)誤輸出,它指的是當(dāng)程序與運(yùn)行或出錯(cuò)時(shí),結(jié)果也會(huì)顯示到屏幕上; 實(shí)際中,我們的數(shù)據(jù)輸入并不一定要從鍵盤中輸入,輸出也不是只能輸出到屏幕上;我們可以從文件、內(nèi)存中輸入數(shù)據(jù)到程序,也可以從程序中輸出數(shù)據(jù)到文件及內(nèi)存中;

在此文中,輸入/輸出都是對(duì)文件而言;

了解上面兩個(gè)概念的有什么作用呢?作用就是你了解了我們操作對(duì)象是——文件;同時(shí)了解對(duì)文件進(jìn)行的操作——數(shù)據(jù)的輸入及輸出;

那么,我們操作文件的一般思路是什么?思考1分鐘鐘再往下看!

操作一個(gè)文件時(shí)無非就以下三個(gè)步驟:

第一:打開文件;

第二:操作文件;

第三:關(guān)閉文件;

就是這么簡(jiǎn)單,你在之前的生活經(jīng)歷中早就掌握文件的操作思路了;問題在于,在Linux中,怎么打開、操作、關(guān)閉文件?答案是用對(duì)應(yīng)的函數(shù)操作,所以IO的學(xué)習(xí)除了了解基本概念外,就是學(xué)習(xí)函數(shù)的的使用。

我先以標(biāo)準(zhǔn)IO 為例:我們通過四個(gè)函數(shù)來解析基本的操作思路;

標(biāo)準(zhǔn)IO中打開文件用 fopen()函數(shù);原型為 FILE *fopen(const char *path, const char *mode);從原型中可以看出,fopen()有兩參數(shù);形參const char *path對(duì)應(yīng)就是我需要打開的文件名稱,包括文件的路徑名稱;const char *mode指的是打開文件后我們要對(duì)文件進(jìn)行項(xiàng)什么樣的操作? 是讀、寫、還是添加的寫?參數(shù)如下:

mode 的參數(shù)有一些固定值;

r ——只讀方式打開,

r+ ——讀寫方式打開,

以上兩個(gè)參數(shù)必須要求文件存在;

w ——只寫方式打開,

w+ ——讀寫方式打來;

使用以上兩個(gè)參數(shù)時(shí);若文件存在,則會(huì)清空文件,再寫入具體數(shù)據(jù)!若文件不存在,則創(chuàng)建文件再寫入數(shù)據(jù);

a —— 以只寫方式打開;

a+ —— 以讀寫方式打開;

以上兩個(gè)參數(shù)使用時(shí),若文件存在,則在后面添加數(shù)據(jù),若文件不存在,則創(chuàng)建再寫入數(shù)據(jù);

上面的6個(gè)參數(shù)就是mode 可以寫入的全部值;(都是單獨(dú)使用的)

在fopen前有一個(gè)FILE *; 它是什么呢?當(dāng)我們創(chuàng)建一個(gè)打開一個(gè)文件時(shí),就會(huì)創(chuàng)建一個(gè)FILE 結(jié)構(gòu)體描述改文件,或者說是創(chuàng)建一個(gè)FILE文件結(jié)構(gòu)體和實(shí)際的文件關(guān)聯(lián)起來;之后對(duì)FILE * 變量的操作就是對(duì)文件的操作;FILE 結(jié)構(gòu)體也稱為流;

標(biāo)準(zhǔn)IO關(guān)閉文件的函數(shù)是 fclose()函數(shù),原型為:int fclose(FILE *fp);

只要把對(duì)應(yīng)的文件流變量傳給fclose()就可以了;

我們先來看一個(gè)fopen()函數(shù)的例子;
#include <stdio.h>
 
int main(int argc,char *argv[])
{
 
     FILE *fp;
 
     if(argc !=2)
     {
        printf("usage %s <filename>\n",argv[0]);
        exit(1);
     }
 
     fp = fopen(argv[1],"w");
     if(fp == NULL)
     {
         perror("perror");
         exit(1);
     }
 
      fclose(fp);
      return 0;
}

上面就是一個(gè)簡(jiǎn)單的打開文件的程序;

接下來要做的事就是怎么去操作文件?

文件的操作分兩種方式,對(duì)文件進(jìn)行讀,或者對(duì)文件進(jìn)行寫!

讀寫的函數(shù)比較多,作者以fgets()和fputs()為例來講解如何對(duì)文件進(jìn)行讀寫操作;首先是fgets(); 它的主要作用是從文件流中讀取數(shù)據(jù),原型: char *fgets(char *s, int size, FILE *stream);對(duì)應(yīng)的參數(shù)從后往前看,F(xiàn)ILE *stream 指的是要讀取的文件流,也會(huì)是要從此文件中讀取數(shù)據(jù);每次讀的大小對(duì)應(yīng) int size ,并把數(shù)據(jù)存放到 char *s 對(duì)應(yīng)的地址,成功會(huì)返回讀到的字節(jié)數(shù), 失敗返回NULL;

下面時(shí)fgets()的實(shí)例程序:
#include <stdio.h>
#include <stdlib.h>
int main(int argc,  char *argv[])
{
   FILE *fp;
   char buf[20];
 
  if(argc !=2)
  {
     printf("usage %s <filename>\n",argv[0]);
     exit(1);
  }
  fp = fopen(argv[1],"r");
  if(fp == NULL)
  {
     perror("fopen failed");
     exit(1);
  }
  while (fgets(buf, 20, fp) !=NULL)
   {
     printf("%s",buf);
      }
fclose(fp);
  return 0;
}

上面的程序中關(guān)于fgets()使用, 程序每次從fp對(duì)應(yīng)的文件中讀取19個(gè)字節(jié)數(shù)據(jù)并存在在buf中,并且在屏幕上打印出來;直到數(shù)據(jù)讀完為止;

那么,如果想從一個(gè)文件中讀取數(shù)據(jù)并寫到另一個(gè)文件中,該怎么做?這就可以在上面的程序基礎(chǔ)上添加一個(gè)函數(shù)的fputs();它的原型:int fputs(const char *s, FILE *stream); 對(duì)應(yīng)的參數(shù)FILE *stream 是被寫入的文件,也就是把數(shù)據(jù)寫入此文件中;const char *s 是需要寫入的數(shù)據(jù); 實(shí)現(xiàn)從一個(gè)文件中讀取數(shù)據(jù)并寫到另一個(gè)文件中的程序就可以這樣做;
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc,char *argv[])
{
 
     FILE *read_fp,*write_fp;
     char buf[10];
 
     if(argc !=3)
     {
        printf("usage %s <read_filename> <write_filename>\n",argv[0]);
        exit(1);
     }
 
     read_fp = fopen(argv[1],"r");
     if(read_fp == NULL)
     {
        perror("read_fopen failed");
        exit(1);
     }
 
     write_fp = fopen(argv[2],"w");
     if(write_fp == NULL)
     {
        perror("write_fp fopen failed");
        exit(1);
     }
 
     while(fgets(buf, 10, read_fp) !=NULL)
     {
          fputs(buf, write_fp);
     }
 
fclose(read_fp);
fclose(write_fp);
 
      return 0;
}

通過上面的概念及函數(shù)的使用,我們解析了標(biāo)準(zhǔn)IO中對(duì)文件的基本操作,當(dāng)然,對(duì)文件的操作函數(shù)還有很多,但操作思路基本一樣;讀者可以以此為突破口進(jìn)行更深入的學(xué)習(xí)。

上一篇:GDB調(diào)試入門(一)

下一篇:數(shù)據(jù)結(jié)構(gòu)之順序表

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 精品国产一区二区三区性色av | 手机久草视频分类在线观看 | 国产片AV不卡在线观看国语 | 奇米影视官网 | 中文字幕一区二区三区不卡 | 99久久成人精品国产网站 | 学生在线精品一区二区 | BBWBBWBBW少妇毛茸茸 | 国产精品福利视频导航 | 久久人人97超碰超碰窝窝 | 中文字幕免费在线 | 欧美一区二区视频 | 人人人人澡人人爽人人澡 | 亚洲W欧洲无码SSS222 | 亚洲国产欧美日韩在线精品一区 | 色妺妺免费影院 | 成人亚洲区无码偷拍12P | 青青草国产精品欧美成人 | 日韩激情无码免费毛片 | re久久 | 女教师痴汉调教 爱より速く | 国内永久福利在线视频图片 | 爱爱免费视频网站 | 亚洲精品久久久久无码精品 | 在线国产1区 | 日日猛噜噜狠狠扒开双腿小说 | 上海少妇69式偷拍hd | 青青草激情 | 成人免费无码A毛片 | 一个人看的视频免费观看www | 1024在线观看你懂的 | 毛片6 | 天堂av亚洲av国产av | 色爱区区域综合网 | 亚洲小说乱欧美另类 | 成人爽a毛片免费 | 欲求不满的哺乳期人妻 | 免费特级婬片日本高清视频 | 国产精品自在线拍国产手机版 | 久久久SS麻豆欧美国产日韩 | 久久亚洲精品成人无码 |