粤嵌6818开发板如何理解Linux文件IO?

news2024/9/24 21:25:01

一、文件IO的概述
1、什么是文件?
Linux下一切皆文件。普通文件、目录文件、管道文件、套接字文件、链接文件、字符设备文件、块设备文件。
2、什么是IO?
input  output:输入输出
3、什么是文件IO?
对文件的输入输出,把数据写入文件/从文件中读取数据
系统IO:系统调用的IO接口。(open、close、read、write、lseek、mmap、munmap)
标准IO:基于标准C库的IO接口
二、系统IO函数的应用
Linux下的man手册的使用:man  man
第一节:查可执行程序:man 1 ls
第二节:查系统调用的函数:man 2 open
第三节:查库调用的函数:man 3 printf- open  打开文件

#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h>

int open(const char *pathname, int flags);  
int open(const char *pathname, int flags, mode_t mode); 

返回值类型:int
返回值:
        打开文件成功,返回一个新的文件描述符,>=0(相当于人的身份证号)
        打开文件失败,返回-1
形参:
        pathname:要打开的文件的路径名
        flags:打卡文件的方式
        O_RDONLY  只读
        O_WRONLY 只写
        O_RDWR     可读可写
        以上三种方式互斥
        O_APPEND:以追加方式打开文件。
        O_CREAT:如果要打开的文件不存在,系统就创建该文件并打开。
        O_TRUNC:如果要打开的文件中已有数据,那就打开文件并清除已有的数据。
mode:用于指定新建文件的权限,用八进制表示。

- close 关闭文件函数

 #include <unistd.h>   
 int close(int fd);


返回值类型:int
返回值:
       关闭文件成功,返回0
       关闭文件失败,返回-1
形参
       fd:要关闭的文件的文件描述符

练习:编写代码,实现在共享目录中,打开1.txt文件,并打印出文件描述符,再关闭文件。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
    //打开文件
    int fd1;
    fd1 = open("./1.txt",O_RDWR);
    if(fd1 == -1)
    {
        printf("open 1.txt failed!\n");
        return -1;
    }

    printf("fd1 = %d\n",fd1);


    close(fd1);
    return 0;
}

/*
fd1 = 3;
文件描述符是从3开始的,为什么会这样?不是说文件描述符>=0?
其实系统会默认打开三个标准流控,0,1,2就会被占用
0 ---> 标准输入   stdin
1 ---> 标准输出   stdout
2 ---> 标准错误   stderr
所以当我们自己用open函数打开文件时,文件描述符是从3开始的
*/


- lseek   偏移文件指针

 #include <sys/types.h>

 #include <unistd.h>
 
 off_t lseek(int fd, off_t offset, int whence); 返回值类型:off_t (整形)


返回值:
         偏移成功,返回偏移字节数
         偏移失败,返回-1
形参一:fd  文件描述符
形参二:偏移量
形参三:偏移位置
         SEEK_SET   从头位置开始偏移
         SEEK_CUR  从当前位置开始偏移
         SEEK_END  从末尾位置开始偏移
练习2:编写代码,实现在1.txt文件中写入"hello world",再从该文件中读取5个字节数据,并打印出来。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
    //1.打开文件
    int fd = open("./1.txt", O_RDWR|O_CREAT);
   
    if (fd == -1)
    {
        printf("open  1.txt failed!\n");
        return -1;
    }

    //2.写入数据
    char wr_buf[15] = "hello world";
    write(fd, wr_buf, 11);    

    //3.读取数据
    char rd_buf[15] = {0};

    lseek(fd, 0, SEEK_SET);
    read(fd, rd_buf,5);
    
    printf("%s\n", rd_buf);
    
    //4.关闭文件
    close(fd);
   
    return 0;
}

作业:实现一个简单文件拷贝功能,将文件1的数据拷贝到文件2,如果文件2不存在则创建,如果文件2中已有数据则清除。

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

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

相关文章

MySQL索引的创建与基本用法

MySQL索引 MySQL索引是一种数据结构&#xff0c;用于提高查询数据的效率。MySQL索引可以被看作是数据库表的“目录”。就像书籍的目录帮助我们快速找到特定章节的位置一样&#xff0c;数据库索引帮助数据库快速找到特定数据记录的位置。 MySQL索引的类型与创建方法 MySQL索引…

TR1 - Transformer起源与发展

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 1. Transformer的起源与发展 2017年Google在《Attention Is All You Need》中提出了Transformer结构用于序列标注&#xff0c;在翻译任务…

最细节操作 Linux LVM 逻辑卷管理

Linux LVM&#xff08;逻辑卷管理&#xff09; 周末愉快&#xff0c;今天带大家实战一下LVM! 一、LVM理论 LVM&#xff0c;即Logical Volume Manager&#xff0c;逻辑卷管理器&#xff0c;是一种硬盘的虚拟化技术&#xff0c;可以允许用户的硬盘资源进行灵活的调整和动态管理…

2023年五级区划省市县乡镇行政村社区边界数据

行政区划数据是重要的基础地理信息数据&#xff0c;根据国家统计局公布的数据&#xff0c;行政区划共分为五级&#xff0c;分别为省级、地级、县级、乡镇/街道级、村/社区级。 该套数据以2020-2023年国家基础地理信息数据中的县区划数据作为矢量基础&#xff0c;辅以高德行政区…

JavaSE:数据类型与变量

目录 一、前言 二、数据类型与变量 &#xff08;一&#xff09;字面常量 &#xff08;二&#xff09;数据类型 &#xff08;三&#xff09;变量 1.变量概念 2.语法格式 3.整型变量 3.1整型变量 3.2长整型变量 3.3短整型变量 3.4字节型变量 4.浮点型变量 4.1双精…

详解main函数参数argc、argv及如何传参

目录 1、main()函数参数 2、main函数如何传参 2.1 环境准备 2.2 通过 Powershell 窗口传参 2.3 通过vs界面传参 3、int main() 和 int main(int argc, char *argv[]) 特点 1、main()函数参数 在C语言中&#xff0c;main函数可以带参数。main函数的原型通常为以下两种形式…

第4章 数据架构

思维导图 架构是构建一个系统&#xff08;如可居住型建筑&#xff09;的艺术和科学&#xff0c;以及在此过程中形成的成果——系统本身。用通俗的话说&#xff0c;架构是对组件要素有组织的设计&#xff0c;旨在优化整个结构或系统的功能、性能、可行性、成本和用户体验。 将架…

Vue cli创建项目时键盘操作无效;vue3.0项目搭建自定义配置

一. 问题描述 在创建vue3.0项目时&#xff0c;在建好的文件夹&#xff0c;鼠标右键 git bash 使用 vue create my-vue3.0创建新项目时&#xff0c;键盘方向键失效&#xff0c;无法选中对应的选项&#xff08;交互提示符不工作&#xff09; 解决方案&#xff1a; 方案一 使用…

章文嵩等技术大咖共同探讨企业数据治理和降本增效策略运用!

3 月 16 日&#xff0c;AutoMQ 携手 OceanBase 开源社区、KubeBlocks 举行的《LLMs 时代下企业数据管理与降本增效之路》主题 meetup 顺利落幕。活动邀请了 AutoMQ 联合创始人 & CSO、Linux LVS 创始人 章文嵩&#xff0c;AutoMQ 联合创始人 & CTO、Apache RocketMQ 联…

一文秒懂什么是客服知识库

大家有没有遇到过这样的情况&#xff1a;打电话给客服&#xff0c;结果对方半天没明白你的问题&#xff0c;或者回答得牛头不对马嘴&#xff1f;这种时候&#xff0c;你是不是觉得特别郁闷&#xff0c;感觉自己的问题就像被丢进了黑洞&#xff0c;永远找不到答案&#xff1f;其…

利用pyvista库可视化点云

ShapeNet分割数据可视化对比 import os import glob import randomimport pyvista as pvresult_paths glob.glob(r./examples/shapenet/results/predict_err_ply/*/*) print(len(result_paths))case_id random.randint(0, len(result_paths) // 3) point_size 3 opacity 0.…

NX二次开发——选择对象控件(清空选择对象)

一、概述 选择对象控件在NX二次开发中经常使用&#xff0c;最近进行学习时发现一片博客中有清空选择对象控件中出现问题&#xff0c;我尝试着写了一下&#xff0c;应该可以解决博主中的问题&#xff0c;其实博主已经写的很详细了&#xff0c;几乎没怎么改&#xff0c;不知道是不…

又一个城市火了,媒介盒子盘点城市爆火原因

近日&#xff0c;“甘肃天水麻辣烫”在各大平台频频登上热搜榜&#xff0c;甘肃当地也及时接住了这泼天富贵&#xff0c;开通“麻辣烫专线”、机场高铁免费接、免费送门票等。这些措施似曾相识&#xff0c;因为在天水前&#xff0c;已经有淄博和哈尔滨这两个城市的案例可以供天…

Linux本地部署TeslaMate结合内网穿透实现公网访问内网车辆信息

文章目录 1. Docker部署TeslaMate2. 本地访问TeslaMate3. Linux安装Cpolar4. 配置TeslaMate公网地址5. 远程访问TeslaMate6. 固定TeslaMate公网地址7. 固定地址访问TeslaMate TeslaMate是一个开源软件&#xff0c;可以通过连接特斯拉账号&#xff0c;记录行驶历史&#xff0c;统…

【C++】输入流操作符 >> 的重载实现

scmd >> icmd 这一行代码的工作原理基于C的标准库对输入流操作符&#xff08;istream extraction operator&#xff0c;即 >>&#xff09;的重载实现。以下是详细的执行顺序和内部逻辑&#xff1a; 对象准备&#xff1a;在此场景中&#xff0c;scmd 是一个 istring…

成都数字产业园有哪些

成都&#xff0c;这座古老而又充满活力的城市&#xff0c;正逐渐成为数字经济的热土。在这座城市的各个角落&#xff0c;数字产业园如雨后春笋般崭露头角&#xff0c;它们为成都的数字化转型注入了强大的动力。首当其冲的便是国际数字影像产业园。 国际数字影像产业园区&#x…

AI写作如何使用,这些方法简单好学!

随着人工智能技术的不断发展&#xff0c;AI写作成为了一个热门话题。许多人都想知道如何使用AI写作来提高效率和质量。在本文中&#xff0c;我们将探讨一些简单而又易学的方法&#xff0c;帮助大家充分利用AI写作。 首先&#xff0c;我们需要了解什么是AI写作。AI写作是指利用人…

测试开发面试题总结(全)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 某基金管理公司线下测试开发面试题总结。 测开题目如下 可以尝试自己先写&#xff0c;写完之后…

用tp6写的简单的eml的登录和curd

项目地址&#xff1a; 企业管理eml: 这是一个简单的eml (gitee.com) 1.登录和主页显示 1.1 登录功能逻辑图 1.2 控制器 app/controller/index.php php think make:validate LoginValidate <?php namespace app\controller;use app\BaseController; use app\model\User; …

探索海外市场舆情:云手机助力企业赢得全球竞争

在全球化的趋势下&#xff0c;越来越多的企业将目光投向海外市场&#xff0c;迎接着无尽的商机与挑战。然而&#xff0c;随之而来的是境外市场舆情的复杂变化&#xff0c;对企业的声誉和发展带来了潜在风险。如何准确、及时地掌握境外市场的舆情动向&#xff0c;成为了企业必须…