linux基础(IO)中

news2025/1/11 6:01:30

目录:

          1.回顾上一篇的文件系统调用接口

          2.返回值文件描述符

          3.文件描述符分配规则

----------------------------------------------------------------------------------------------------------------------------

1.回顾上一篇的文件系统调用接口

open  :  文件系统调用接口

 那么我们文件也已经可以打开成功了,我们现在如何向文件当中写入呢??

 那么现在我向这个文件写入成功了,那么现在我想读取这个文件呢???

 2.返回值文件描述符

 可发现为什么文件描述符值是从3开始的呢,按道理来说打开错误是返回小于0的数,那打开成功也应该从  0   1   2   开始的呀,可为什么是从3开始的呢???

 那么操作系统会如何管理呢  ???   先描述再组织

 

 操作系统为了进程和文件当中产生关系,那么在我们进程 的内核当中包含了一个结构,这个结构的名字叫做  ---  struct files_struct    -- 这个结构当中又包含了一个数组

这样子我们的  0   1   2   是不是就被占用

 这也就相当于我们在OS层面上, 0  1   2 描述符分别被申请成了保存标准输入键盘文件、显示器显示器文件,分别保存他们3个文件的各自地址,

当你在打开一个新的文件时,在内存里面就需要形成struct file  的结构,然后从众多描述符中把3分配给你,,怎么分配,就是把你struct file的结构体地址填入3号文件描述符内

fd : 本质是内核中是进程和文件关联的数组的下标!!!!!!!!

------------------------------------------------------------------------------------------------------------------------------

3.文件描述符分配规则

我们一直在说标准输入,标准输出,标准错误等等一堆的概念,0代表 的就是我们的键盘,那么我们是不是可以直接从0开始读,往1开始写呢???

既然我们可以调用write往  1    2可以直接写入,本质就是往我们的显示器上打印,那么又什么区别呢????(后面在回答)

----------------------------------------------------------------------------------------------------------------------------

我们还有一个0呢?? 标准输入呢---换句话说我们是不是可以通过我们的read从我们的显示器上读数据呢?????

 上面,我们证明了  0  1  2  也是可以拿来读写的

---------------------------------------------------------------------------------------------------------

我们现在来研究一下文件描述符的分配规则

 

 文件描述符的分配规则 : 给新文件分配的fd,是从fd_array中找一个最小的,没有被使用的文件描述符给你的,作为新的fd!!!

上面我们把   0    2这两个文件给关了,可就是没有关1我们在来关1看看

 我们再换一堆代码来试试看

 本来应该显示到显示器中,但是却被  “显示”到文件内部   !!!!-------输出重定向

可为什么这段代码会出现这样的现象呢????

 

 

 我们这里调用printf实际是向stdout进行打印,我们可以大胆预测一下,FILE这个结构体一定包含了一个整数,是对应在系统层面的,这个文件的打开对应 的fd

所以我们刚刚的printf   是往stdout里写,stdout里面封装了一个fd,它的fd是1,所以它只关心1这个数字,而实际上呢,我们printf在进行写入时,我已经把1原来指向的显示器文件,指向了log.txt文件,而1这个下标的没变的,而printf照样只认识1,所以它向1打印了,本来应该打印到显示器时,结果打印到了log.txt当中  -------------  这也就是重定向的原理

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

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

相关文章

【数据结构】二叉树进阶题目练习

文章目录 二叉树创建字符串二叉树的分层遍历1二叉树的分层遍历2给定一个二叉树, 找到该树中两个指定节点的最近公共祖先二叉树搜索树转换成排序双向链表二叉树展开为链表根据一棵树的前序遍历与中序遍历构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树二叉树的前序遍历 非…

学爬虫,吃牢饭,卑微前端小丑复制antd的icon图标真的太难啦,我用python几秒扒完

目标需求 最近用reactviteantd写了个后管项目,在菜单管理中,需要用户选择菜单的icon图标。 如下: 而在react中使用antd UI库,每个组件都是需要单独导入的,也就是说,如果我要用到所有icon,我需…

亚马逊云科技进一步加快BMW Group的Analytics步伐

BMW Group和亚马逊云科技于2020年宣布达成全面战略合作。本次合作的目标是通过将数据分析置于决策中心,进一步加快BMW Group的创新步伐。本次合作的一个关键要素是进一步开发BMW Group的云数据中心(CDH)。这是在云端管理全公司数据和数据解决…

windows_exporter 部署

目录 - 配置服务- 配置prometheus - 配置服务 下载地址: https://github.com/prometheus-community/windows_exporter/releases 从github上下载windows_exporter.msi(我下载的是windows_exporter-0.22.0-amd64.msi)cmd命令:msie…

对 API 中敏感数据检测,用这个插件就好了

Postcat 中的 openDLP 插件基于 openDLP 开源项目,针对 Postcat 场景实现了敏感 API 发现功能,通过扫描 API 文档,识别该 API 是否可能是一个涉及敏感数据的 API。 目前内置支持 17 类敏感数据类型,可以通过自定义正则支持更多类型…

2023年安全岗秋招经验分享,纯干货,建议收藏!

需要准备的几个方向 简历自我介绍计算机网络操作系统(操作系统原理,Linux,Windows)数据库算法(Leetcode)编程语言(Python,C,go等)安全知识(很多很杂,建议根据…

python3 爬虫相关学习3:response= requests.get(url)的各种属性

目录 1 requests.get(url) 的各种属性,也就是response的各种属性 2 下面进行测试 2.1 response.text 1.2 response.content.decode() 1.2.1 response.content.decode() 或者 response.content.decode("utf-8") 1.2.2 response.content.decode(…

实验室信息管理系统源码,LIS系统源码

云LIS系统是医院信息管理的重要组成部分之一,系统集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。LIS系统不仅是自动接收检验数据,打印检验报告,系统保存检验信息的工具,而…

平抑风电波动的电-氢混合储能容量优化配置(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

22届硕士,去年秋招拿了字节跳动offer,有一说一,不是很难进

自从抖音短视频APP火了之后,起公司字节跳动也逐渐向着大厂靠拢,相信大家都已经对这家公司很熟悉了,尤其是近几年来,对它的认识也在不断刷新,它惊人的发展速度确实让行业内人刮目相看,如今很多年轻人也想要挤…

【工作记录】springsecurity从入门到实战(一)

一、介绍 在web应用开发中,安全无疑是十分重要的,目前最流行的安全框架莫过于shiro和springsecurity了。 以下是二者简单的一个对比: SpringSecurityShiro基本功能完善完善文档完善程度强大强大社区支持度依托于Spring,社区支持强大强大集…

Flutter仿写微信导航栏快速实现页面导航

文章目录 前言使用TabBar实现TabBar介绍TabBar的重要属性说明TabBarView介绍TabBarView的重要属性TabBar总结TabBar实现底部导航的例子 BottomNavigationBar实现BottomNavigationBar介绍BottomNavigationBar实现底部导航栏的例子 总结BottomNavigationBarTabBar根据实际情况选择…

代码随想录算法训练营day43 | 1049. 最后一块石头的重量 II ,494. 目标和,474.一和零,01背包问题总结

代码随想录算法训练营day43 | 1049. 最后一块石头的重量 II ,494. 目标和,474.一和零 1049. 最后一块石头的重量 II解法一:动态规划 494. 目标和解法一:动态规划 474.一和零解法一:动态规划 01背包问题总结 1049. 最后…

商场导航地图系统,商场导航怎么实现?

商场导航怎么实现?在商场里面,手机上的导航往往接收不了信号或者不支持,由于室内不只是平面的,跟室外导航有很大的区别,因此,室内如何快速导航就成了现代化发展的趋势。电子地图作为大家最喜闻乐见的高效应…

交换机欺骗(Switch Spoofing)简介

交换机欺骗是修改设备的 MAC 地址以伪装成授权交换机端口并获得对目标网络的访问权限的过程。由于 MAC 地址对于特定设备是唯一的,因此大多数网络使用这些 MAC 地址来验证设备并与其通信或建立网络连接。通过欺骗授权设备或更简单地说,网络识别为“受信任…

redis_exporter 部署

目录 - 下载地址- 启动vim ./start.shvim ./stop.sh - 配置prometheus - 下载地址 https://github.com/oliver006/redis_exporter/releases - 启动 为了方便辨认 我更改了它的端口,并编了./start.sh和./stop.sh两个脚本方便以后启动,语句如下&#xf…

机器学习之逻辑回归、一(学习理论)

P(D|θ) 文章目录 一、前言二、逻辑回归的由来三、到底什么是逻辑回归(1). 先对逻辑回归有个大概感觉(2).逻辑回归与线性回归的区别(3).sigmoid函数(4)目标函数&#xf…

有关于ChatGPT你需要了解的内容应该都在这了,看这一篇就够啦

在国内用了很长一段时间的ChatGPT,每次跟小白,哪怕是用ChatGPT的人交流的时候,都感觉解释不清,正好今天周末,给大家整理一篇关于ChatGPT的科普文,想要了解或使用ChatGPT的人,一定要看完~~~ 什么…

内网渗透(CS与MSF联动) ATTCK实战系列一红队实战(一)

靶场下载地址: http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 拓扑图 环境配置 win7网络配置情况: 外网 内网域网络 Win2K3网络配置情况: 内网域网络 win2008(域控)网络配置情况: 内网域网络 渗透过程 开始之前,先到win7上开启phpstudy 打开网页&#…

安装 kubeadm

安装 kubeadm、kubelet 和 kubectl 基于Red Hat的发行版本 1、写入软件源 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch enabled1 gpgcheck1 …