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

    文章

    11292

    浏览量

    209318
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136680
  • 编程
    +关注

    关注

    88

    文章

    3614

    浏览量

    93685
收藏 人收藏

    评论

    相关推荐

    linux下c语言编程pdf

    linux下c语言编程内容为::基础知识,进程介绍,文件操作,时间概念,信号处理,消息管理,线程操作,网络编程,Linux 下
    发表于 12-08 10:00 0次下载

    利用C语言和GEL语言的Flash编程新方法

    利用C语言和GEL语言的Flash编程新方法 以TMS320VC5402为例,探讨一种综合运用C语言
    发表于 03-29 15:13 1596次阅读
    利用<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 126次下载

    C语言文件编程操作

    Linux 常见的文件类型:普通文件、目录文件、设备文件、管道文件、套接字和链接文件等等。它们的
    发表于 11-16 10:19 1845次阅读
    <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 6254次阅读
    <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 941次阅读
    Linux开发_ Linux命令复习与<b class='flag-5'>文件</b>目录复习

    Linux开发_文件目录操作介绍、创建BMP图片

    介绍C语言文件编程,创建BMP图片,BMP图片结构介绍,介绍目录接口编程,Makefile知识点。
    的头像 发表于 09-17 15:44 1481次阅读
    Linux开发_<b class='flag-5'>文件</b>目录操作介绍、创建BMP图片

    PLC编程语言C语言的区别

    在工业自动化和计算机编程领域中,PLC(可编程逻辑控制器)编程语言C语言各自扮演着重要的角色。
    的头像 发表于 06-14 17:11 2769次阅读

    hex文件如何查看原c语言代码

    是处理器可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程
    的头像 发表于 09-02 10:37 2122次阅读