在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言-文件編程

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-09-09 11:33 ? 次閱讀

【摘要】 這篇文章介紹C語言的文件編程函數,案例代碼是在Linux環境下運行測試的分別介紹了C語言標準庫的文件編程接口和Linux下的文件編程函數。

1. 文件編程函數介紹

如果在Linux系統下學習C語言,就會了解到兩套文件編程接口函數:

C語言標準的文件編程函數: fopenfreadfwritefclose

Linux下提供的文件編程函數: openreadwriteclose

傳參的區別:

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

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

2. C語言標準庫提供的文件編程函數

下面介紹C語言標準庫提供的文件編程函數,一般對文件常用的操作就是:創建(打開)、讀、寫、關閉。

其他的函數用法同理,只要把這4個函數學會了,基本的文件操作已經可以完成了。

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

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

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

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

3. Linux下的系統函數: 文件編程函數

Linux下也有一套系統函數,用于文件操作,這些函數在Linux下常用于讀寫設備文件;當然,讀寫普通文件也是一樣,普通文件也是磁盤上的數據,也是操作塊設備驅動。

#include 
#include 
#include 

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
函數功能: 打開或者創建文件
函數參數:
const char *pathname  : 文件的路徑
int flags :打開文件的權限. 
   比如: O_RDONLY  O_WRONLY  O_RDWR  O_CREAT
mode_t mode :創建文件時指定文件本身的權限.
   比如:
    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
返回值: (返回文件描述符--小整數)文件打開成功值>=0 否則<0
示例: open("123.c",O_RDWR|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);
創建一個123.c的新文件,并且指定該文件的權限是最高權限. chmod 777 123.c一樣

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

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

int close(int fd);
函數功能: 關閉已經打開的文件.

4. 案例: 實現文件拷貝功能(fopen)

例如: cp 123.c 456.c 將123.c的數據拷貝到456.c文件里。

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

#include 
//實現: cp 123.c 456.c
int main(int argc,char **argv)
{
    if(argc!=3)
    {
        printf("參數: ./a.out <源文件> <目標文件>\n");
        return 0;
    }
    /*1. 打開源文件*/
    FILE *src_fp=fopen(argv[1],"rb");
    if(src_fp==NULL)
    {
        printf("%s 文件打開失敗.\n",argv[1]);
        return -1;
    }
    /*2. 創建新文件*/
    FILE *new_fp=fopen(argv[2],"wb");
    if(new_fp==NULL)
    {
        printf("%s 文件創建失敗.\n",argv[2]);
        fclose(src_fp);
        return -2;
    }
    /*3. 實現文件的拷貝*/
    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. 關閉文件*/
    fclose(new_fp);
    fclose(src_fp);
    return 0;
}

5. 案例: 實現文件拷貝功能(open)

例如: cp 123.c 456.c 將123.c的數據拷貝到456.c文件里。

#include 
#include 
#include 
#include 

//實現: cp 123.c 456.c
int main(int argc,char **argv)
{
    if(argc!=3)
    {
        printf("參數: ./a.out <源文件> <目標文件>\n");
        return 0;
    }
    /*1. 打開源文件*/
    int fd_src=open(argv[1],O_RDONLY);
    if(fd_src<0)
    {
        printf("源文件打開失敗.\n");
        return -1;
    }
    /*2. 創建新文件*/
    int fd_new=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
    if(fd_new<0)
    {
        printf("新文件創建失敗.\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. 關閉文件*/
    close(fd_src);
    close(fd_new);
    return 0;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11406

    瀏覽量

    212095
  • C語言
    +關注

    關注

    180

    文章

    7624

    瀏覽量

    139462
  • 編程
    +關注

    關注

    88

    文章

    3671

    瀏覽量

    94619
收藏 人收藏

    評論

    相關推薦

    linux下c語言編程pdf

    linux下c語言編程內容為::基礎知識,進程介紹,文件操作,時間概念,信號處理,消息管理,線程操作,網絡編程,Linux 下
    發表于 12-08 10:00 ?0次下載

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

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

    C語言編程技巧

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

    STM8的C語言編程說明

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

    C語言入門經典-C語言編程

    C語言入門經典-C語言編程,感興趣的可以看看哦。
    發表于 08-16 18:54 ?128次下載

    C語言文件編程操作

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

    C語言程序例程的文件結構

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

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

    C語言編程文件操作函數庫匯總資源下載
    發表于 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>操作函數庫匯總資源下載

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

    C語言編程常用的文件處理函數匯總下載
    發表于 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>處理函數匯總下載

    單片機c語言+編程c語言_CC ++編程語言有什么區別?

    單片機c語言+編程c語言C & C++ ar
    發表于 11-23 17:51 ?20次下載
    單片機<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>有什么區別?

    單片機c語言+編程c語言_C編程語言簡介

    單片機c語言+編程c語言In this tutorial you will get basic introduction to
    發表于 11-29 10:21 ?38次下載
    單片機<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開發_ Linux命令復習與文件目錄復習

    介紹Linux下基本指令、系統環境搭建、復習C語言文件編程
    的頭像 發表于 09-17 15:44 ?1107次閱讀
    Linux開發_ Linux命令復習與<b class='flag-5'>文件</b>目錄復習

    Linux開發_文件目錄操作介紹、創建BMP圖片

    介紹C語言文件編程,創建BMP圖片,BMP圖片結構介紹,介紹目錄接口編程,Makefile知識點。
    的頭像 發表于 09-17 15:44 ?1718次閱讀
    Linux開發_<b class='flag-5'>文件</b>目錄操作介紹、創建BMP圖片

    PLC編程語言C語言的區別

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

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

    是處理器可以直接執行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對程
    的頭像 發表于 09-02 10:37 ?3754次閱讀
    主站蜘蛛池模板: 在线观看视频h | 亚洲图片欧美色图 | 欧美一级黄色片在线观看 | 男啪女视频免费观看网站 | 国产色播 | 看全色黄大色大片免费久久 | 久久综合久 | 激情婷婷综合 | 午夜福利国产一级毛片 | 美女网站在线观看视频18 | 另类激情网 | 成视频年人黄网站免费视频 | 精品国产_亚洲人成在线高清 | 免费一级毛毛片 | 丁香激情六月 | 美女视频黄视大全视频免费网址 | 男女刺激性视频大片 | 欧美日韩视频综合一区无弹窗 | 免费看黄视频网站 | 全国最大色成免费网站 | 欧美色图中文字幕 | 中文字幕有码在线视频 | 国产成人夜间影院在线观看 | 久久精品久久久 | 全免费一级毛片在线播放 | 国产精品你懂的 | 福利片在线观看免费高清 | 丁香花免费观看视频 | 高清一区二区三区四区五区 | 99色99| 卡一卡二卡三国色天香永不失联 | 久青草国产观看在线视频 | free性欧美video | 国产精品资源手机在线播放 | 一级毛片一片毛 | 国产美女视频黄a视频免费全过程 | 九色在线播放 | 在线免费视频 | 亚洲国产一区二区三区a毛片 | 看免费一级片 | 两性色午夜视频免费老司机 |