Linux基础I/O之文件描述符fd 重定向(上)

目录

一、预备知识

二、C语言中的文件接口

三、系统调用中的文件接口


一、预备知识

        首先我们要明确的一个观点是 --- 文件 = 内容 + 属性。而且我们之前也还将过一个概念,那就是Linux下一切皆文件。
        内容是数据,属性也是数据 --- 那么也就是说我们的存储文件必须既要存储内容,又需要存储属性数据(默认是磁盘上的文件)。当我们想要访问一个文件时,首先肯定是要将这个文件打开,打开后将其加载到内存当中,而加载磁盘上的文件,就一定会需要访问磁盘,那么这样的工作是谁来做呢 --- 肯定是我们的操作系统来做的。还有一个问题是,我们只能打开一个文件吗,一个进程可以打开多个文件吗 --- 答案是,肯定是可以的。也就是说操作系统在运行中,可能会打开很多个文件! --- 操作系统需要管理打开的文件 --- 先描述在组织 --- 那么一个文件要打开,一定要现在内核中形成被打开的文件对象。

二、C语言中的文件接口

首先我们要知道的是一个C/C++程序在跑起来的时候,会默认打开三个文件:
stdin : 标准输入  stdout :标准输出   stderr :标准错误
为什么需要默认打开这三个文件呢? --- 主要是为了让程序员默认进行输入输出代码的编写。

C语言中操作文件的接口:
打开文件:fopen();
关闭文件:fclose();
读取文件:fscanf()  ,fgets()  ,fread();
写文件:fprintf()  ,fputs()   ,fwrite();

这里给大家写段代码回忆一下:

文件w打开方式,会清空原来内容 (如:echo > 输出重定向)
文件a打开方式,从文件结尾开始写,追加(如:echo >> 追加重定向)

三、系统调用中的文件接口

对于操作文件的系统调用接口主要有四个:

open:打开文件

close:关闭文件

read:读取文件

write:向文件中写入   

先来看看open:

首先先来讲一讲每个参数的意义:
pathname : 表示要打开文件的路径和文件名
flags:表示打开文件的方式,这里的 flags 采取位图的方式,一次性来标志多个位置,根据各个位置的值,来判断,打开文件的方式。下面介绍几个:

O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开

                   这三个常量,必须指定一个且只能指定一个

O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND: 追加写

mode:若是文件不存在,要创建时,表示以什么权限创建(8进制表示),当然这里创建文件同样也是会收到权限掩码的影响的。
返回值为 int:是一个文件描述符 fd(等会说)

这里写段代码体会一下:

close接口:

这个接口就比较简单,主要就是起到一个关闭文件的一个功能

read接口:

首先 fd:文件描述符,表示向哪个文件中进行写入
buf:将读取到的内容放入buf中。
count:表明要读取的长度。
返回值:读取成功返回读取到字节数。

write接口:

和read的含义差不多,只是反过来了。

接下来写一段代码,让我们试试这几个系统调用接口:

读取:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

戴尔第十一代十二代十三代处理器重装系统找不到驱动程序

一、戴尔第十一代十二代十三代处理器重装系统找不到驱动程序 VMD(Volume Management Device)是针对下一代存储推出的部署方案。这套方案支持从 PCIe 总线对 NVMe 固态盘进行热升级和更换,而无需关闭系统,同时标准化 LED 管理可帮助…

梦想编织者Luna:COZE从童话绘本到乐章的奇妙转化

前言 Coze是什么? Coze扣子是字节跳动发布的一款AI聊天机器人构建平台,能够快速创建、调试和优化AI聊天机器人的应用程序。只要你有想法,无需有编程经验,都可以用扣子快速、低门槛搭建专属于你的 Chatbot,并一键发布…

JavaFX 节点

JavaFX Node类javafx.scene.Node是添加到JavaFX 场景图的所有组件 的基类(超类) 。JavaFX Node 类是抽象的,因此你只需将 Node 类的子类添加到场景图中。场景图中的所有 JavaFX Node 实例共享一组由 JavaFX Node 类定义的公共属性。本 JavaFX…

快速搭建Jenkins自动化集成cicd工具

一、简介 jenkins是一款优秀的自动化持续集成运维工具,可以极大的简化运维部署的步骤。 传统的项目部署需要手动更换最新的项目代码,然后打包并运行到服务器上。 使用Jenkins可以自动化实现,当代码编写完成并提交到git后,Jenki…

【单片机毕业设计选题24009】-基于单片机的智能窗帘控制系统设计

系统功能: 采用STM32最小系统板控制,采集传感器数据显示在OLED上并可通过按键或红外遥控器控制两路继电器和步进电机。 1. 使用DHT11模块采集环境温湿度 2. 使用光敏传感器采集光照强度 3. 继电器模拟加温(采集温度小于设定温度时) 4. 继…

定点数的加减法以及浮点数的表示

加减法运算是计算机中最基本的计算,由于减法可以看成是负值是加法,因此计算机中使用补码表示有符号数之后,可以将减法运算和加法运算合并在一起讨论。 1.补码的加减运算 补码加减运算的规则简单,公式如下(设机器字长为n)&#x…

【Windows11 安装 Detectron2】

Windows11 安装 Detectron2 1. 创建虚拟环境2.配置Pytorch环境3. 安装cocoapi4. 下载detectron24.1 修改setup.py4.2 修改 nms_rotated_cuda.cu(detectron2\detectron2\layers\csrc\nms_rotated\nms_rotated_cuda.cu) 5. 开始下载依赖库以及编译环境6.测…

【权威出版/投稿优惠】2024年智慧城市与信息化教育国际会议(SCIE 2024)

2024 International Conference on Smart Cities and Information Education 2024年智慧城市与信息化教育国际会议 【会议信息】 会议简称:SCIE 2024 大会时间:点击查看 大会地点:中国北京 会议官网:www.iacscie.com 会议邮箱&am…

Windows10安装Docker Desktop(实操步骤版)

1,下载Docker Desktop 官网下载地址: https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe 国内镜像下载地址(本人下载这个): https://smartidedl.blob.core.chinacloudapi.cn/docker/2…

MySQL经典面试题:谈一谈你对事务的理解

文章目录 📑事务事务的基本概念回滚开启事务的sql语句 事务的基本特性总结一下涉及到的三个问题 ☁️结语 📑事务 事务的基本概念 事务是用来解决一类特定场景的问题的,在有些场景中,完成某个操作,需要多个sql配合完…

三分钟了解绿色积分消费增值模式

在现今快速发展的经济环境中,绿色积分消费增值模式悄然在市场上崭露头角,引起了社会各界的广泛关注。这一模式起源于加密货币领域的单边上涨理念,经过精心改良,已经成功融入国内的产品盘项目中,展现出其独特的魅力和价…

嵌入式学习记录6.14(练习)

#include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);this->resize(1028,783); //设置左侧背景QLabel *lab1new QLabel(this);lab1->…

C语言期末考试大纲详解

一: C语言的基本概念 C语言是一种通用的、过程式的计算机编程语言,设计提供了低级内存访问和简单、灵活的语言结构。以下是关于C语言的一些基本概念和组成部分的详细解释。 文件扩展名 .c:这是C语言源代码文件的扩展名。它包含了程序员编…

Mysql学习笔记-SQL优化总结

详细内容参见https://blog.csdn.net/qingwufeiyang_530/article/details/139705898?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139705898%22%2C%22source%22%3A%22qingwufeiyang_530%22%7D

《全网首发》平衡三进制图灵机的构建

PS:以下内容均为本人原创,未经授权及许可,严禁引图、转载或加工,违者必究。 ————2024年6月13号 1、图灵机的概述 图灵机(Turing machine)是一种理论计算模型,由英国数学家阿兰图灵(Alan T…

定个小目标之刷LeetCode热题(16)

针对本题排序流程,主要是将链表拆分为长度为subLength的子链表1和子链表2,然后把子链表1和子链表2合并为一条有序链表,重复上述步骤直到把链表都拆分完,这样这条链表每段长度为2的子链表都是有序的,那么要整条链表有序…

鸿蒙求职面试内容总结——6月3日ZR的FS项目

最近接到了一些公司的入职面试邀约,这里略去公司的和项目的名字,做一些整理分享。 一、长列表如何实现部分渲染,使用的是哪一个API 在鸿蒙系统中,可以使用List组件来实现长列表的部分渲染。List组件支持使用条件渲染、循环渲染、…

快速LLaMA:面向大型语言模型的查询感知推理加速 论文摘要翻译与评论

论文摘要翻译与评论 论文标题: QuickLLaMA: Query-aware Inference Acceleration for Large Language Models 提出的框架 我们Q-LLM框架的示意图。来自记忆上下文的输入被分割成记忆块,通过查询感知的上下文查找来搜索与查询相关的块。目前的键值缓存…

怎么改公网IP?

在互联网时代,公网IP地址作为连接互联网的标识,对于个人用户和企业来说具有重要意义。公网IP有时会受到限制、安全性不高等问题,因此需要进行改变。本文将介绍几种常用的方法来改变公网IP。 更改路由器设置 大多数家庭和办公室网络都是通过…