Linux C应用编程-1-文件IO

news2025/8/8 22:58:48

1.open与close

#include <stdio.h>
//IO操作需要包含的头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

char filename[] = "text.txt";

int main(void)
{
    int fd;

    fd = open(filename, O_RDWR | O_CREAT, 0777);
    if (fd != -1) {
        printf("open %s ok\r\n",filename);
        if (close(fd) != -1) {
            printf("close %s ok\r\n",filename);
            
        } else {
            printf("close %s fail\r\n",filename);
        }
    } else {
        printf("open %s fail\r\n",filename);
    }

    return 0;
}

常用flags有:

以下三个常数中必须指定一个,且仅允许指定一个。

  • O_RDONLY 只读打开
  • O_WRONLY 只写打开
  • O_RDWR 可读可写打开

以下可选项可以同时指定0个或多个,和必选项按位或起来作为flags参数。可选项有很多,这里只介绍一部分,其它选项可参考open(2)的Man Page:

  • O_APPEND 表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。
  • O_CREAT 若此文件不存在则创建它。使用此选项时需要提供第三个参数mode,表示该文件的访问权限。
  • O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回。
  • O_TRUNC 如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断(Truncate)为0字节。
  • O_NONBLOCK 对于设备文件,以O_NONBLOCK方式打开可以做非阻塞I/O(Nonblock I/O)

2.read与write

#include <stdio.h>
#include <stdlib.h>
//IO操作需要包含的头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

char filename[] = "./text.txt";

int main(void)
{
    int fd;
    char buf[10];
    int n;
    int i = 0;
    int len;
    
    //如果文件不存在就创建文件
    fd = open(filename, O_RDWR | O_CREAT, 0777);
    //fd = open(filename, O_RDONLY | O_WRONLY);
    if(fd == -1) {
        printf("open %s fail\r\n",filename);
        exit(1);
    } else {
        printf("open %s ok\r\n", filename);
    }
    
    n = write(fd, "1234567890", 10);
    if(n == -1) {
        printf("write %s fail\r\n",filename);
    } else {
        printf("write %s %d buff\r\n",filename, n);
    }
    
    //由于write操作会使读写位置处于内容末尾,需要指向到当前位置的前10偏移位置
    lseek(fd, -10, SEEK_CUR);
    
    n = read(fd, buf, 10);
    if(n == -1) {
        printf("read %s fail\r\n",filename);
    } else {
        printf("read %s %d buff\r\n",filename, n);
    }

    printf("read buf len:%d\r\n", n);
    //write(STDOUT_FILENO, buf, 10);
    for (i = 0; i < 10; i++)
    {
        printf("%c",buf[i]);
    }
    
    if(close(fd) == -1) {
        printf("close %s fail\r\n",filename);
        exit(1);
    } else {
        printf("close %s ok\r\n", filename);
    }

    return 0;
}

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

3.mmap

mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,对文件的读写可以直接用指针来做而不需要read/write函数。

#include <stdio.h>
#include <stdlib.h>
//内存映射需要的头文件
#include <sys/mman.h>
//文件操作需要的头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
    int *p;
    int fd;
    
    //判断文件是否存在
    if (access("text.txt",F_OK) == -1) {
        perror("access text.txt");
        exit(1);
    }

    fd  = open("text.txt", O_RDWR);
    if (fd == -1) {
        perror("open text.txt");
        exit(1);
    }
    
    //映射之前文件内容不能为空,否则映射出错
    //mmap没法增加文件长度,通过内存对文件操作的数据长度不会超过文件本身包含的数据长度的
    //length==6,代表将文件中6word的数据映射到内存,但如果length小于一个内存页的长度,
    //测试发现实际设置共享内存的大小是一页。
    p = mmap(NULL, 6, PROT_WRITE, MAP_SHARED, fd, 0);
    if (p == MAP_FAILED) {
        perror("mmap");
        exit(1);
    }
    
    if (close(fd) == -1)
    {
        perror("close text.txt");
        exit(1);
    }
    
    p[0] = 0x31303030;  //低位在前,高位在后 X86架构下
    p[1] = 0x32303030;
    p[2] = 0x33303030;
    p[3] = 0x34303030;
    p[4] = 0x35303030;
    p[5] = 0x36303030;

    //取消映射
    if (munmap(p, 6) == -1) {
        perror("munmap");
        exit(1);
    }
    
    return 0;
}

prot参数有四种取值:

  • PROT_EXEC表示映射的这一段可执行,例如映射共享库
  • PROT_READ表示映射的这一段可读
  • PROT_WRITE表示映射的这一段可写
  • PROT_NONE表示映射的这一段不可访问

flag参数有很多种取值,这里只讲两种,其它取值可查看mmap(2)

  • MAP_SHARED多个进程对同一个文件的映射是共享的,一个进程对映射的内存做了修改,另一个进程也会看到这种变化。
  • MAP_PRIVATE多个进程对同一个文件的映射不是共享的,一个进程对映射的内存做了修改,另一个进程并不会看到这种变化,也不会真的写到文件中去。

4.实用工具

1)access

用于判断该文件是否存在或者是否可以读/写某一已存在的文件。

#include<unistd.h>
int access(const char * pathname,int mode);
/*
pathname:文件路径
mode: 文件访问的权限
R_OK,W_OK与X_OK:检查文件是否具有读取、写入和执行的权限。
F_OK:判断该文件是否存在。

返回0值,表示成功,只要有一权限被禁止则返回-1。
*/

2)lseek

改变文件当前读写位置。打开文件时读写位置是0,表示文件开头,通常读写多少个字节就会将读写位置往后移多少个字节。

#include <sys/types.h>
#include <unistd.h>

off_t lseek(int fd, off_t offset, int whence);

/*
fd 表示要操作的文件描述符
offset是相对于whence(基准)的偏移量
whence 可以是SEEK_SET(文件指针开始),SEEK_CUR(文件指针当前位置) ,SEEK_END为文件指针尾

返回值:文件读写指针距文件开头的字节大小,出错,返回-1
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

systemd 252 如预期的锁定了 Linux 引导过程

导读今天给大家介绍一下systemd 252锁定 Linux 引导过程systemd 252 如预期的锁定了 Linux 引导过程 之前&#xff0c;我们 报道 过&#xff0c;systemd 创始人发文指出 Linux 引导过程不安全&#xff0c;并提出采用加密签名的统一内核镜像&#xff08;UKI&#xff09;&#x…

SA实战 · 《SpringCloud Alibaba实战》第02章-专栏设计

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe001.github.io 文章汇总:https://binghe001.github.io/md/all/all.html 大家好,我是冰河~~ 从今天开始,我们正式进入《SpringCloud Alibaba实战》专栏的学习,在《开篇》一文中,我们大体介绍了整个专栏的结构安…

html一个案例学会所有常用HTML(H5)标签

目录 前言 HTML5声明 HTML框架 head头部 声明编码格式 告诉IE浏览器&#xff0c;IE8/9及以后的版本都会以最高版本IE来渲染页面。 移动端适配 网站标题 网站正文 网站内容的组成 文字有关标签 音频视频标签 表单标签与input属性 前言 HTML没有什么难度&#xf…

计算机网络笔记6应用层

前言 站在巨人的肩膀上&#xff0c;让知识的获得更加容易&#xff01;本文为学习计算机网络后,自顶向下的学习笔记&#xff1b; 学习视频来源&#xff1a; 计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;课件pdf来源&#xff1a;评论区up bili_68567544整理目录…

Linux(基于Centos7)(三)

文章目录一、任务介绍二、任务实施2-1、管理用户账号与密码2-2、用户组管理一、任务介绍 知识目标 1.了解用户角色的类型。 2.理解用户和用户组的关系。 3.了解用户账号文件、用户密码文件和用户组账号文件。 能力目标 1.能够通过命令来创建和管理用户与用户组。 2.能够通过命…

面向对象编程·下

面向对象编程下⭐小提问解答⭐3.多态3.1向上转型 - 父类引用子类对象3.1.1方法传参3.1.2方法返回3.2动态绑定3.3方法重写3.4理解多态3.5向下转型 - 子类引用父类对象3.6super 关键字3.7在构造方法中调用重写的方法(一个坑)3.8总结4.抽象类4.1语法规则4.2抽象类的作用5.接口5.1语…

基于2D连续图像序列的行人骨架关节角度估计

目 录 第1章 绪 论 1 1.1 行人骨架关节角度估计 1 1.2 行人骨架关节角度估计的应用领域 2 1.3 行人骨架关节角度估计方法简述 3 1.3. 1 基于概率统计的方法 3 1.3.2 基于语法的方法 4 1.3.3 基于模型的方法 4 1.4 行人骨架关节角度估计的难点和面临的挑战 5 1.5 本文的研究意义…

xinput1_4.dll丢失怎么修复?修复方法分享

对于电脑系统来说牵一发而动全身。电脑系统当中的任何一个小小的文件都关系着整个电脑系统的运行&#xff0c;大家都明白&#xff0c;电脑系统以及很多的大型系统软件都是安装在电脑C盘当中的&#xff0c;所以C盘也叫做系统盘&#xff0c;系统盘中有很多非常重要的软件&#xf…

【通用设计方法】之接收异常保护

目录 前言 一、接收异常保护 二、超短包、背靠背的支持 后记 前言 为了系统的鲁棒性&#xff0c;我们常常会做一系列的异常保护功能&#xff0c;避免系统挂死。 这里仅仅介绍接收保护的某些设计思路&#xff0c;抛砖引玉。 一、接收异常保护 设计思路&#xff1a;通过可配…

肠道微生物在天然产物生物转化中的潜在作用

谷禾健康 什么是天然产物&#xff1f; 天然产物是指动物、植物、昆虫或微生物体内的组成成分或其代谢产物以及人和动物体内许多内源性的化学成分&#xff0c;是自然产生的小分子。值得注意的是&#xff0c;天然产物来源中&#xff0c;植物来源占85%以上。 谷禾在这里主要介绍植…

【服务器数据恢复】某云ECS网站服务器mysql数据恢复案例

云服务器特点&#xff1a; 1、云服务器不需要购买硬件设备&#xff0c;用户按照业务需求支付一定的费用购买相应的硬软件资源。云服务器提供商的数据中心不仅提供硬件/软件环境&#xff0c;还提供咨询服务。 2、云服务器可以充分利用资源&#xff0c;根据业务需求随时调整硬软件…

前后端分离项目,vue+uni-app+php+mysql在线小说电子书阅读小程序系统设计与实现

功能介绍 用户首次登陆系统需要注册一个用户作为账号&#xff0c;用户在登录平台后&#xff0c;可以进行平台的操作。主要模块包括以下几点&#xff1a; 登录功能&#xff1a;注册普通账号登录&#xff1b;登录后可以修改用户的基本信息&#xff0c;也可以退出。 资讯功能&…

MySQL数据库优化总结

概述 本文所指的SQL优化主要是指MySQL优化&#xff0c;当然思想是通用的&#xff0c;其他SQL语言不排除其通用性。谈到SQL优化&#xff0c;最好有一个指导或者规范&#xff0c;照着这个规范去对比&#xff0c;发现可以优化的地方。参考博文MySQL推荐使用规范。 总体思路 优化…

移动端开发之混合开发模式优劣势综述

2020年&#xff0c;我国互联网行业实现快速发展&#xff0c;网民规模稳定增长。截至2020年底&#xff0c;我国5G网络用户数超过1.6亿&#xff0c;约占全球5G总用户数的89%。 截至2020年底&#xff0c;我国网民规模达9.89亿&#xff0c;互联网普及率达到70.4%。报告还显示&…

2022买护眼灯到底有没有用?双十二学生护眼灯该怎么选择

护眼台灯经过多年的发展&#xff0c;如今性能已经是非常不错了&#xff0c;护眼效果不能说百分之百可预防孩子近视&#xff0c;90%以上减少孩子近视的概率还是能轻松做到的&#xff0c;特别是一些主打专业护眼的台灯&#xff0c;效果极其明显出色。 学生护眼灯该怎样选择&…

echarts优秀使用案例

echarts优秀使用案例 App.vue <template><div class"box"><a-card size"small" title"各类型监测设备利用率" class"center"><!-- color 值由组件外部进行传递&#xff08;会重复修改的部分尽量减少逻辑复杂程度…

开源让这位 00 后逆袭成为各类大奖收割者

OpenI 启智社区在 2022 年推出的开源打榜活动&#xff0c;聚集了一帮非常活跃的开发者&#xff0c;上榜者覆盖了来自全国高校、科研机构、企业达 100 多家。其中&#xff0c;高校学生占 65%&#xff0c;近 60%的上榜者是 90 后&#xff0c;32%的上榜者是 00 后。真是 00 后浪推…

[hadoop全分布部署]虚拟机Hadoop集群交换 SSH 密钥与验证SSh无密码登录

&#x1f468;‍&#x1f393;&#x1f468;‍&#x1f393;博主&#xff1a;发量不足 个人简介&#xff1a;耐心&#xff0c;自信来源于你强大的思想和知识基础&#xff01;&#xff01; &#x1f4d1;&#x1f4d1;本期更新内容&#xff1a;虚拟机Hadoop集群交换 SSH 密钥与…

留学生怎么正确应对Paper写作?

留学生很多都是对Paper比较抗拒的&#xff0c;因为Paper写作的频率是很高的&#xff0c;平时的课程也是比较紧凑的。相信对于初到英国留学的小伙伴们而言Paper将很长时间都是大家的痛。多少留学生被Paper折磨&#xff0c;其实英文Paper写不好的原因在于&#xff0c;对于中国留学…

Neo4j 5的自治图数据库集群

原文作者&#xff1a;John Stegeman &#xff0c;图数据库产品专家&#xff0c;Neo4j。基于原文翻译并补充整理而成。 新近发布的Neo4j 版本5推出了自治集群&#xff08;Autonomous Cluster&#xff09;&#xff0c;以支持易于部署、可扩展、自容错等重要特性。下面我们就来一…