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

news2024/11/24 13:57:13

目录

一、预备知识

二、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的含义差不多,只是反过来了。

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

读取:

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

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

相关文章

t265 jetpack 6 px4 ros2

Ubuntu22.04 realsenseSDK2和ROS2Wrapper安装方法,包含T265版本踩坑问题_ros2 realsense-CSDN博客 210 git clone https://github.com/IntelRealSense/librealsense.git 212 git branch 215 git tag 218 git checkout v2.51.1 219 git branch 265 git clone https://…

C语言---------深入理解指针

目录 一、字符指针 二、指针数组: 三、数组指针: 1、定义: 2、&数组名和数组名区别: 3、数组指针的使用: 四、数组参数,指针参数: 1、一维数组传参: 2、二维数组传参&am…

基于springboot的大学计算机基础网络教学系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的大学计算机基础网络教学…

opencv-python(十)

绘制直线 cv2.line(img, pt1, pt2, color, thickness1, lineTypeLINE_8) 上述代码可以从pt1点绘一条线到pt2点。 img:绘图对象 pt1:线段的起点,画布的左上角坐标是(0, 0) pt2:线段的终端 color:(B&…

记录一次root过程

设备: Redmi k40s 第一步, 解锁BL(会重置手机系统!!!所有数据都会没有!!!) 由于更新了澎湃OS系统, 解锁BL很麻烦, 需要社区5级以上还要答题。 但是,这个手机…

React+TS前台项目实战(十)-- 全局常用组件CopyText封装

文章目录 前言CopyText组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲项目常用复制文本组件封装,这个组件是一个用于拷贝文本的 React 组件,它提供了拷贝,国际化和消息提示的功能 CopyText组件 1. 功能分…

C++11完美转发(引用折叠、万能引用)

完美转发是指在函数模板中,完全依照模板的参数的类型,将参数传递给函数模板中调用的另外一个函数。 函数模板在向其他函数传递自身形参时,如果相应实参是左值,它就应该被转发为左值;如果相 应实参是右值,它…

创建vite工程,使用框架为Vanilla时,语言是typescript,修改http端口的方法

直接在项目根目录创建 vite.config.ts文件。 在该文件中添加内容: import { defineConfig } from vite;export default defineConfig({server: {port: 7777,}, });最后尝试运行package.json中的Debug

Codeforces Round 953 (Div. 2) A - C 题解

因为有事只做了A-C,都比较简单,全是很简单的思维,明天有空还会添加上D,如果有人需要可以明天常来看看! 进入正题: A. Alice and Books 题意:给你n个数字,将这些数字分到两堆里&am…

PD19 Parallels Desktop 虚拟机 安装Windows10系统 操作步骤(保姆级教程,轻松上手)

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、打开pd 19 虚拟机,点击右上角文件,新建2、通过下载好的镜像安装Windows10系统。找到镜像文件位置,安装,配置2、显示安装完成,打开Windows10系统 三、运行测试1、打…

60.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(8)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:59.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(7) 御剑是用…

中小企业使用CRM系统的优势有哪些

中小企业如何在竞争激烈的市场中脱颖而出?除了优秀的产品和服务,一个高效的管理工具也是必不可少的。而客户关系管理(CRM)系统正是这样一个能帮助企业提升客户体验、优化内部管理流程的重要工具。接下来,让我们一起探讨…

【Python网络爬虫分步走】使用LXML解析网页数据

Python网络爬虫分步走 – 使用LXML解析网页数据 Web Scraping in Python - Using LXML to Parse Web Data By Jackson@ML Lxml作为Python的第三方库,提供易用的且功能强大的API,用来解析XML和HTML文档。事件驱动的API被用于分步骤解析。 本文简要介绍使用lxml库解析网页的基…

TF-IDF在现代搜索引擎优化策略中的作用

TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本挖掘和信息检索的统计方法,用来评估一个词语对于一个文档或一个语料库的重要程度。TF-IDF算法结合了词频(TF)和逆文档频率(IDF&#xff0…

2-7 基于matlab实现声纹识别

基于matlab实现声纹识别,通过提取声音信号的MFCC特征,然后形成特征向量,通过训练语音,对测试语音进行识别,可以识别训练库内的声音,也可以识别出训练库外的声音。程序已调通,可直接运行。 2-7 m…

力扣每日一题 6/16 字符串 + 随机一题 动态规划/数学

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 521.最长特殊序列 I【简单】 题目: 给你两个字符串 a 和 b&am…

人工智能模型组合学习的理论和实验实践

组合学习,即掌握将基本概念结合起来构建更复杂概念的能力,对人类认知至关重要,特别是在人类语言理解和视觉感知方面。这一概念与在未观察到的情况下推广的能力紧密相关。尽管它在智能中扮演着核心角色,但缺乏系统化的理论及实验研…

CodeQL从入门到入土

为什么在现在写这文章 CodeQL传闻找到了Log4j的漏洞,这段时间上边要求,把公司系统内部常见的问题用CodeQL写检测脚本,用于系统长期检测。主要是记录这段时间的学习,以及自己总结的常用写法。 一个需求,不同人写出来的…

二叉树-距离是K的二叉树节点(hard)

目录 一、问题描述 二、解题思路 1.总体思路(DFSBFS结合) 2.下面举具体例子来对思路进行解释 (1)返回值在一侧的情况 (2)返回值在两侧的情况 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 1.总体思路(DFSBFS结合&#xff0…

【2024亲测无坑】Oracle--19C在Centos7上的静默安装(rpm版)

一、Oracle 19c Linux安装(Centos 7) 1.查看磁盘可用空间及配置ip地址 [rootlocalhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G …