linux---文件描述符和重定向

2023-05-16

文件描述符
进程就是通过struct file结构体来描述打开的文件,使用struct file* fd_array[]来存储我们的文件。那什么是文件描述符呢?

  1. 什么是文件描述符:
    文件描述符就是struct file* array[]数组的下标,用户打开文件,操作系统通过file结构体描述文件,并且将指针添加到array中去管理,,想用户返回这个文件描述信息,在数组位置(下标),用户操作文件的时候,将这个下标传递给操作系统,操作系统通过下标找到文件描述信息,进而操作文件

在这里插入图片描述

  • 进程中的文件描述符
    当我们打开一个进程的时候,我们就会默认打开三个文件描述符,

  • 0:标准输入:STDIN_FILENO

  • 1:标准输出:STDOUT_FILENO

  • 2:标准错误:STDERR_FILENO

在这里插入图片描述
当我们打开文件的时候就会使用一个新的文件描述符,但是文件描述符有自己的分配规则:最小未使用原则。当我们在前面有未使用的最小的文件描述符的时候,我们在打开新的文件描述符时我们就使用这个最小的文件描述符。

  1. 库函数和系统调用接口中的操作句柄

    在库函数中我们的操作句柄是文件流指针

    • stdin
    • stdout
    • stderr
      在系统调用接口中我们的操作句柄就是文件描述符

系统调用接口和库函数本来就是上下级的关系,所有操作句柄同样是有包含关系的,文件流指针就包含了我们的文件描述符就是说,在文件流指针的结构体中就有一个成员变量是文件描述符

重定向
改变数据流向,将写入制定文件数据改变之后写到另一个文件

       #include <unistd.h>
       int dup(int oldfd);
       int dup2(int oldfd, int newfd);

参数:

  • oldfd:原指向的文件描述符。
  • newfd:改变的文件描述符。
    让newfd也指向oldfd指向的文件,如果newfd已经打开了一个文件的话,就关闭以前的文件
  1 #include <stdio.h>
  2 #include <fcntl.h>
  3 #include <unistd.h>
  4 #include <sys/stat.h>
  5 #include <string.h>
  6 #include <sys/types.h>
  7 int main(){
  8     int fd = open("te.txt",O_RDWR|O_APPEND);
  9     char buf[1024] = "你好啊!!";
 10     dup2(1,fd);                                                             
 11     write(fd,buf,strlen(buf));
 12     return 0;
 13 }
~      

实现向文件中写入内容进行数据重定向,将数据输出到显示器中,并不写到文件中去。这就是我们的重定向

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux---文件描述符和重定向 的相关文章

随机推荐

  • python脚本与shell脚本的相互调用

    python脚本与shell脚本的相互调用 python脚本调用shell脚本 xff1a 存在的shell脚本 xff08 test sh sh xff09 xff1a span class token comment bin csh s
  • 自动实现一个minishell更新(增加重定向功能)

    增加重定向功能 1 include lt stdio h gt 2 include lt unistd h gt 3 include lt stdlib h gt 4 include lt string h gt 5 include lt
  • linux sh 运行csh类型脚本报错

    初入linux xff0c 脚本用的是csh版本 xff0c 在尝试的过程中 xff0c 突然发现按照csh的语法写的指令 xff0c 运行不了 xff0c 例如 1 sh xff1a span class token function s
  • QT creator导入现有工程

    QT creator导入现有工程 如果从gitlib或者其他代码库下载了一些源文件 xff0c 用QT creator打开步骤如下 xff1a 点击 菜单栏的 File gt New File or Project点击 Import Pro
  • 腾讯测试开发面试题

    唉 xff0c 今天面试腾讯的测试开发工程师 xff0c 脸被打肿了 xff0c 下来查阅资料 xff0c 把一道面试题讲一讲吧 xff0c 题目是 xff1a O N 求一个数字串能整除3的连续子串的个数 xff0c 前缀和数组 43 对
  • bat命令调用rar进行文件夹压缩

    64 echo off set 34 ymd 61 date 0 4 date 5 2 date 8 2 date 11 2 date 14 2 34 rem ymd 就是当前的时间 例如20181022 34 C Program File
  • vbs执行相应的bat文件

    set ws 61 createobject 34 wscript shell 34 rem 新建一个脚本对象 do rem do loop 执行循环 ws run 34 C Users Administrator Desktop rar
  • 思岚科技RPlidar A3激光雷达ROS源码详解

    思岚科技RPlidar A3激光雷达ROS源码详解 使用 RPLIDARD 的 SDK 其实重点在于看懂client cpp和node cpp两个sample代码 xff0c 因此在这里我们讲从这里入手学习 RPLIDAR A3 的SDK
  • gcc和makefile用法总结(建议收藏)

    文章目录 64 toc 1 用GCC制作静态链接库静态链接库的创建静态链接库的使用 2 用GCC制作动态链接库动态链接库的创建动态链接库的使用 3 GCC找不到库文件怎么办 xff1f GCC生成可执行文件时找不到库文件GCC运行可执行文件
  • linux---基础IO

    在标准库中我们学习了printf xff0c fprintf xff0c sprintf xff0c snprintf等等相关的函数 xff0c 接下来是我们的系统I O调用接口 open includ e lt sys types h g
  • HDU-2121(朱刘算法优化版+虚根处理无根树形图)

    hdu2121 span class token macro property span class token directive keyword include span span class token string lt bits
  • #10091. 「一本通 3.5 例 1」受欢迎的牛(强联通+度数结论)

    libreoj10091 题解 xff1a 首先简化一下 xff0c 若欢迎关系图是一个DAG 有向无环图 xff0c 则只要统计每个点的出度 xff0c 出度为0的点即为受所有牛欢迎的点且只有唯一一个 xff0c 因为若存在两个以上出度为
  • https://ac.nowcoder.com/acm/problem/13947(牛客网)

    Contest xff1a 链接 xff1a https ac nowcoder com acm problem 13947 来源 xff1a 牛客网 n支队伍一共参加了三场比赛 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中
  • https://ac.nowcoder.com/acm/problem/14136(牛客网 监视任务)

    题目链接 xff1a 题解 xff1a 本题我们不能一上来就用树状数组来统计每一位的贡献 xff0c 我们需要先对区间进行一个排序 xff0c 先按照区间的右端点由小到大排序 xff0c 再按照区间的左端点从小到大排序 xff0c 再按照区
  • https://ac.nowcoder.com/acm/problem/14269(Sum 牛客网)

    位运算 43 组合数学 43 树状数组 xff1a 题解 xff1a 我们如果直接计算操作2的话会很困难 xff0c 我们可以直接考虑一个数的二进制位对答案做出的贡献 xff0c 显然二进制位为0时就不会有任何贡献 xff0c 当我们知道所
  • 异或的路径(牛客网)

    异或路径 43 位运算 43 考虑贡献 题解 xff1a 我们要求所有点对构成的所有路径的异或权值总和 xff0c 肯定不能暴力 xff0c 我们可以知道 xff0c 先搞一个数组d i 表示i节点到根节点1的路径上边权异或和 xff0c
  • TCP为什么采用三次握手而不是两次握手

    希仁版 计算机网络 中的例子是这样的 xff0c 已失效的连接请求报文段 的产生在这样一种情况下 xff1a client发出的第一个连接请求报文段并没有丢失 xff0c 而是在某个网络结点长时间的滞留了 xff0c 以致延误到连接释放以后
  • linux生成可执行文件的命令

    linux生成带调试的可执行文件命令行 xff1a g span class token operator 43 43 span span class token operator span g main span class token
  • git rebase origin/develop

    1 进行git rebase origin develop之前需要进行 lt git add gt lt git commit gt 操作先将修改给提交到暂存区 2 执行git rebase origin develop时候有冲突的话需要自
  • linux---文件描述符和重定向

    文件描述符 进程就是通过struct file结构体来描述打开的文件 xff0c 使用struct file fd array 来存储我们的文件 那什么是文件描述符呢 xff1f 什么是文件描述符 xff1a 文件描述符就是struct f