一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言-文件編程

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-09-09 11:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【摘要】 這篇文章介紹C語言的文件編程函數(shù),案例代碼是在Linux環(huán)境下運(yùn)行測試的分別介紹了C語言標(biāo)準(zhǔn)庫的文件編程接口和Linux下的文件編程函數(shù)。

1. 文件編程函數(shù)介紹

如果在Linux系統(tǒng)下學(xué)習(xí)C語言,就會了解到兩套文件編程接口函數(shù):

C語言標(biāo)準(zhǔn)的文件編程函數(shù): fopen、freadfwrite、fclose

Linux下提供的文件編程函數(shù): open、read、write、close

傳參的區(qū)別:

基于文件指針: fopen fclose fread fwrite 比較適合操作普通文件。

基于文件描述符: open close read write 比較適合操作設(shè)備文件。

2. C語言標(biāo)準(zhǔn)庫提供的文件編程函數(shù)

下面介紹C語言標(biāo)準(zhǔn)庫提供的文件編程函數(shù),一般對文件常用的操作就是:創(chuàng)建(打開)、讀、寫、關(guān)閉。

其他的函數(shù)用法同理,只要把這4個函數(shù)學(xué)會了,基本的文件操作已經(jīng)可以完成了。

#include 
FILE *fopen(const char *path, const char *mode);
函數(shù)功能: 打開或者創(chuàng)建文件
函數(shù)參數(shù):
const char *path  填文件的路徑
const char *mode  填權(quán)限。比如: wb rb a+b 
函數(shù)返回值: 文件打開或者創(chuàng)建成功返回對應(yīng)的文件指針.

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函數(shù)功能: 讀文件
函數(shù)參數(shù):
void *ptr :讀取數(shù)據(jù)存放的緩沖區(qū)。
size_t size :每次讀取的大小
size_t nmemb :每次讀取的次數(shù)
FILE *stream :讀取文件
返回值: 讀取成功的次數(shù)。
比如: fread(buff,1,1000,fp);   從fp文件里讀取1000個字節(jié)的數(shù)據(jù)到buff里。

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
函數(shù)功能: 寫文件
函數(shù)參數(shù):
void *ptr :將要寫入的數(shù)據(jù)緩沖區(qū)首地址。
size_t size :每次寫入的大小
size_t nmemb :每次寫入的次數(shù)
FILE *stream :寫入的文件
返回值: 寫入成功的次數(shù)。
比如: fwrite(buff,1,1000,fp);   向fp文件里寫1000個字節(jié)的數(shù)據(jù),數(shù)據(jù)從buff里獲取。

int fclose(FILE *fp);
函數(shù)功能: 關(guān)閉打開的文件。

3. Linux下的系統(tǒng)函數(shù): 文件編程函數(shù)

Linux下也有一套系統(tǒng)函數(shù),用于文件操作,這些函數(shù)在Linux下常用于讀寫設(shè)備文件;當(dāng)然,讀寫普通文件也是一樣,普通文件也是磁盤上的數(shù)據(jù),也是操作塊設(shè)備驅(qū)動。

#include 
#include 
#include 

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
函數(shù)功能: 打開或者創(chuàng)建文件
函數(shù)參數(shù):
const char *pathname  : 文件的路徑
int flags :打開文件的權(quán)限. 
   比如: O_RDONLY  O_WRONLY  O_RDWR  O_CREAT
mode_t mode :創(chuàng)建文件時指定文件本身的權(quán)限.
   比如:
    S_IRWXU  00700 user (file owner) has read, write and execute permission
    S_IRUSR  00400 user has read permission
    S_IWUSR  00200 user has write permission
    S_IXUSR  00100 user has execute permission

    S_IRWXG  00070 group has read, write and execute permission
    S_IRGRP  00040 group has read permission
    S_IWGRP  00020 group has write permission
    S_IXGRP  00010 group has execute permission

    S_IRWXO  00007 others have read, write and execute permission
    S_IROTH  00004 others have read permission
    S_IWOTH  00002 others have write permission
    S_IXOTH  00001 others have execute permission
返回值: (返回文件描述符--小整數(shù))文件打開成功值>=0 否則<0
示例: open("123.c",O_RDWR|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);
創(chuàng)建一個123.c的新文件,并且指定該文件的權(quán)限是最高權(quán)限. chmod 777 123.c一樣

ssize_t read(int fd, void *buf, size_t count);
函數(shù)功能: 讀文件
函數(shù)參數(shù):
int fd  :文件描述符. ---表示已經(jīng)打開的文件。
void *buf :讀取數(shù)據(jù)存放的緩沖區(qū).
size_t count :讀取字節(jié)數(shù)量.
返回值: 成功讀取的字節(jié)數(shù)量.

ssize_t write(int fd, const void *buf, size_t count);
函數(shù)功能: 寫文件
函數(shù)參數(shù):
int fd  :文件描述符. ---表示已經(jīng)打開的文件。
void *buf :將要寫入到文件的數(shù)緩沖區(qū)首地址.
size_t count :寫入的字節(jié)數(shù)量.
返回值: 成功寫入的字節(jié)數(shù)量.

int close(int fd);
函數(shù)功能: 關(guān)閉已經(jīng)打開的文件.

4. 案例: 實(shí)現(xiàn)文件拷貝功能(fopen)

例如: cp 123.c 456.c 將123.c的數(shù)據(jù)拷貝到456.c文件里。

注意: 下面這個代碼需要在命令行上運(yùn)行,需要給main函數(shù)傳參。如果是在windows下IED軟件里運(yùn)行,可以將傳參代碼屏蔽掉,改成讓用戶輸入,或者直接把參數(shù)固定也可以。

#include 
//實(shí)現(xiàn): cp 123.c 456.c
int main(int argc,char **argv)
{
    if(argc!=3)
    {
        printf("參數(shù): ./a.out <源文件> <目標(biāo)文件>\n");
        return 0;
    }
    /*1. 打開源文件*/
    FILE *src_fp=fopen(argv[1],"rb");
    if(src_fp==NULL)
    {
        printf("%s 文件打開失敗.\n",argv[1]);
        return -1;
    }
    /*2. 創(chuàng)建新文件*/
    FILE *new_fp=fopen(argv[2],"wb");
    if(new_fp==NULL)
    {
        printf("%s 文件創(chuàng)建失敗.\n",argv[2]);
        fclose(src_fp);
        return -2;
    }
    /*3. 實(shí)現(xiàn)文件的拷貝*/
    unsigned char buff[1024];
    unsigned int cnt;
    while(1)
    {
        cnt=fread(buff,1,1024,src_fp);
        fwrite(buff,1,cnt,new_fp);
        if(cnt!=1024)break;
    }
    /*4. 關(guān)閉文件*/
    fclose(new_fp);
    fclose(src_fp);
    return 0;
}

5. 案例: 實(shí)現(xiàn)文件拷貝功能(open)

例如: cp 123.c 456.c 將123.c的數(shù)據(jù)拷貝到456.c文件里。

#include 
#include 
#include 
#include 

//實(shí)現(xiàn): cp 123.c 456.c
int main(int argc,char **argv)
{
    if(argc!=3)
    {
        printf("參數(shù): ./a.out <源文件> <目標(biāo)文件>\n");
        return 0;
    }
    /*1. 打開源文件*/
    int fd_src=open(argv[1],O_RDONLY);
    if(fd_src<0)
    {
        printf("源文件打開失敗.\n");
        return -1;
    }
    /*2. 創(chuàng)建新文件*/
    int fd_new=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
    if(fd_new<0)
    {
        printf("新文件創(chuàng)建失敗.\n");
        close(fd_src);
        return -2;
    }
    /*3. 拷貝文件*/
    unsigned char buff[1024];
    int cnt;
    while(1)
    {
        cnt=read(fd_src,buff,1024);
        write(fd_new,buff,cnt);
        if(cnt!=1024)break;
    }
    /*4. 關(guān)閉文件*/
    close(fd_src);
    close(fd_new);
    return 0;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213778
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141717
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3689

    瀏覽量

    95247
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    linux下c語言編程pdf

    linux下c語言編程內(nèi)容為::基礎(chǔ)知識,進(jìn)程介紹,文件操作,時間概念,信號處理,消息管理,線程操作,網(wǎng)絡(luò)編程,Linux 下
    發(fā)表于 12-08 10:00 ?0次下載

    利用C語言和GEL語言的Flash編程新方法

    利用C語言和GEL語言的Flash編程新方法 以TMS320VC5402為例,探討一種綜合運(yùn)用C語言
    發(fā)表于 03-29 15:13 ?1773次閱讀
    利用<b class='flag-5'>C</b><b class='flag-5'>語言</b>和GEL<b class='flag-5'>語言</b>的Flash<b class='flag-5'>編程</b>新方法

    C語言編程技巧

    電子發(fā)燒友為您提供了 C語言 編程技巧,幫助您解決編程的困擾。
    發(fā)表于 06-23 14:53 ?604次下載

    STM8的C語言編程說明

    STM8的C語言編程說明STM8的C語言編程說明STM8的C
    發(fā)表于 12-10 16:19 ?37次下載

    C語言入門經(jīng)典-C語言編程

    C語言入門經(jīng)典-C語言編程,感興趣的可以看看哦。
    發(fā)表于 08-16 18:54 ?131次下載

    C語言文件編程操作

    Linux 常見的文件類型:普通文件、目錄文件、設(shè)備文件、管道文件、套接字和鏈接文件等等。它們的
    發(fā)表于 11-16 10:19 ?1999次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>文件</b><b class='flag-5'>編程</b>操作

    C語言程序例程的文件結(jié)構(gòu)

    以往寫C語言程序都是一個文件里面寫個幾十、幾百行,在練算法的時候還可以,現(xiàn)在搞開發(fā)需要模塊化編程,所謂模塊化編程,就是指一個程序包含多個源
    的頭像 發(fā)表于 03-14 10:32 ?6472次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>程序例程的<b class='flag-5'>文件</b>結(jié)構(gòu)

    C語言編程文件操作函數(shù)庫匯總資源下載

    C語言編程文件操作函數(shù)庫匯總資源下載
    發(fā)表于 04-15 16:42 ?13次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>編程</b><b class='flag-5'>文件</b>操作函數(shù)庫匯總資源下載

    C語言編程常用的文件處理函數(shù)匯總下載

    C語言編程常用的文件處理函數(shù)匯總下載
    發(fā)表于 04-15 16:44 ?9次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>編程</b>常用的<b class='flag-5'>文件</b>處理函數(shù)匯總下載

    單片機(jī)c語言+編程c語言_CC ++編程語言有什么區(qū)別?

    單片機(jī)c語言+編程c語言C & C++ ar
    發(fā)表于 11-23 17:51 ?20次下載
    單片機(jī)<b class='flag-5'>c</b><b class='flag-5'>語言</b>+<b class='flag-5'>編程</b><b class='flag-5'>c</b><b class='flag-5'>語言</b>_<b class='flag-5'>C</b>和<b class='flag-5'>C</b> ++<b class='flag-5'>編程</b><b class='flag-5'>語言</b>有什么區(qū)別?

    單片機(jī)c語言+編程c語言_C編程語言簡介

    單片機(jī)c語言+編程c語言In this tutorial you will get basic introduction to
    發(fā)表于 11-29 10:21 ?38次下載
    單片機(jī)<b class='flag-5'>c</b><b class='flag-5'>語言</b>+<b class='flag-5'>編程</b><b class='flag-5'>c</b><b class='flag-5'>語言</b>_<b class='flag-5'>C</b><b class='flag-5'>編程</b><b class='flag-5'>語言</b>簡介

    Linux開發(fā)_ Linux命令復(fù)習(xí)與文件目錄復(fù)習(xí)

    介紹Linux下基本指令、系統(tǒng)環(huán)境搭建、復(fù)習(xí)C語言文件編程
    的頭像 發(fā)表于 09-17 15:44 ?1270次閱讀
    Linux開發(fā)_ Linux命令復(fù)習(xí)與<b class='flag-5'>文件</b>目錄復(fù)習(xí)

    Linux開發(fā)_文件目錄操作介紹、創(chuàng)建BMP圖片

    介紹C語言文件編程,創(chuàng)建BMP圖片,BMP圖片結(jié)構(gòu)介紹,介紹目錄接口編程,Makefile知識點(diǎn)。
    的頭像 發(fā)表于 09-17 15:44 ?1921次閱讀
    Linux開發(fā)_<b class='flag-5'>文件</b>目錄操作介紹、創(chuàng)建BMP圖片

    PLC編程語言C語言的區(qū)別

    在工業(yè)自動化和計算機(jī)編程領(lǐng)域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。
    的頭像 發(fā)表于 06-14 17:11 ?4738次閱讀

    hex文件如何查看原c語言代碼

    是處理器可以直接執(zhí)行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對程
    的頭像 發(fā)表于 09-02 10:37 ?4939次閱讀