首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux系统下dup和dup2函数解析

----今天接着昨天的话题讲,在昨天的文章里面,我们讲到了文件共享有三种实现方式,其中一种实现方式就是我们今天要讲的dup和dup2函数来实现了;那么咋们也就不废话 了,直接直奔主题吧。...函数解析: 1、相比于dup函数,dup2函数它的优势就是可以指定新的文件描述符的大小,用法比较灵活。...\n", fd1); fd2 = dup2(fd1, 16); printf("fd2 = %d....\n", fd2); close(fd1); return -1; } 2、dup2和dup函数一样对文件写操作都是接续写的,这里我就不做演示了,写法和dup函数一样。...上面的源代码链接:https://github.com/1121518wo/linux-/tree/master 三、Linux系统下管道符和重定向的学习补充: 这里可以参考刘遄老师写的<linux就该这么学

99030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    linux c——dup( )和dup2( )函数详解

    dup()函数和dup2()函数书上在文件操作那一章,已经讲过了,这周看重定向这块,发现它挺重要,就再看了回,记录下。...2、dup2函数 头文件及其定义: #include int dup2(int oldfd, int newfd); dup2与dup区别是dup2可以用参数newfd...dup2所复制的文件描述符与原来的文件描述符共享各种文件状态。共享所有的锁定,读写位置和各项权限或flags等. 返回值: 若dup2调用成功则返回新的文件描述符,出错则返回-1....dup2(oldfd, newfd)等效于 close(oldfd); fcntl(oldfd, F_DUPFD, newfd); 在shell的重定向功能中,(输入重定向”和输出重定向...”>”)就是通过调用dup或dup2函数对标准输入和标准输出的操作来实现的。

    2.1K10

    【Linux系统调用API】七、errno()、strerror()、dup()、dup2()

    什么是errno errno可以理解为一个全局变量,它存储了出错信息。...3. dup()和dup2()函数 包含头文件 #include 函数原型 int dup(int oldfd); int dup2(int oldfd, int newfd);...,它们两个的功能和区别就是: dup(oldfd):复制文件描述符,返回一个当前空闲的最小文件描述符,并且让这个文件描述符指向oldfd所指向的文件;dup() uses the lowest-numbered...unused descriptor for the new descriptor. dup2(oldfd, newfd):重定向,关闭newfd对应的文件使文件描述符newfd空闲,然后让newfd...API与C库函数的调用关系》中讲的系统调用问题,C库函数printf()会调用系统API函数write(),这是会用到一个文件指针,这里面有一个缓冲区buffer,要打印的内容会先放入到buffer中,

    20310

    用指针的观点来深入理解dup和dup2的用法

    用指针的观点来深入理解dup和dup2的用法 作者:ejian 2007-09-17 网上有很多资料详细讲解了dup和dup2的用法,有讲得不错的,但总感觉理解起来还是有点困难,通过实践,我发现一种C程序更容易理解的讲解方法...-使用类比指针的方法来阐述dup和dup2的用法,可能更容易让人在非常短的时间内接受,下面的内容是我理解dup和dup2用法的总结,希望对dup和dup2存有疑惑的朋友所有帮助。...int* STDIN_FILENO = (int *)0; // 这是一个指向标准输入的指针,由系统预定义,所以可以直接拿来使用 // 下面这句的意思相当于:int* stdinp = STDIN_FILENO...下面这句相当于: // STDIN_FILENO = fd[0]; // 从这里可以看出STDIN_FILENO和stdinp指向了不同的位置 dup2(fd[0], STDIN_FILENO); /...不过,还有一点要请各位注意,dup和dup2的改变指向时会分配内存,所以在不使用时要记得打开,否则 你可能遇到“打开的文件过多”的错误,比如: int* stdinp =dup(STDIN_FILENO

    1.3K10

    Flink的groupBy和reduce究竟做了什么

    [源码解析] Flink的groupBy和reduce究竟做了什么 0x00 摘要 Groupby和reduce是大数据领域常见的算子,但是很多同学应该对其背后机制不甚了解。...本文将从源码入手,为大家解析Flink中Groupby和reduce的原理,看看他们在背后做了什么。...0x01 问题和概括 1.1 问题 探究的原因是想到了几个问题 : groupby的算子会对数据进行排序嘛。 groupby和reduce过程中究竟有几次排序。...此阶段的输出直接写到输出文件系统,一般为HDFS。 2.3 Combine Combine是我们需要特殊注意的。在mapreduce中,map多,reduce少。...} } 让我们顺着Flink程序执行阶段继续看看系统都做了些什么。 0x05 批处理执行计划(Plan) 程序执行的第一步是:当程序运行时候,首先会根据java API的结果来生成执行plan。

    2.7K20

    select count(*) 底层究竟做了什么?

    为什么 InnoDB 只能通过扫表来实现 count( * )?(见本文最后的问题) 全表COUNT( * )作为 table scan 类型操作的一个 case,有什么风险?...JOIN对象有 2 个重要的方法: JOIN::optimize(), JOIN::exec(),分别用于进行查询语句的优化 和 查询语句的执行。...A:从 InnoDB 接口层面考虑,分为 “读第一行” 和 “读下一行”,是 2 个不同的执行过程,读第一行需要找到一个 ( cursor ) 位置并做一些初始化工作让后续的过程可递归。...2.3 行可见性及 row_search_mvcc 函数 这里我们主要通过一组 case 和几个问题来看行可见性对 COUNT( * ) 的影响。 ?...A:MySQL 采取”读到什么就是什么”的策略,即X-count( * )在后面可以读到 100 这条记录。

    1.3K30

    select count(*)底层究竟做了什么?

    为什么 InnoDB 只能通过扫表来实现 count( * )?(见本文最后的问题) 全表COUNT( * )作为 table scan 类型操作的一个 case,有什么风险?...JOIN对象有 2 个重要的方法: JOIN::optimize(), JOIN::exec(),分别用于进行查询语句的优化 和 查询语句的执行。...A:从 InnoDB 接口层面考虑,分为 “读第一行” 和 “读下一行”,是 2 个不同的执行过程,读第一行需要找到一个 ( cursor ) 位置并做一些初始化工作让后续的过程可递归。...2.3 行可见性及 row_search_mvcc 函数 这里我们主要通过一组 case 和几个问题来看行可见性对 COUNT( * ) 的影响。 ?...A:MySQL 采取”读到什么就是什么”的策略,即X-count( * )在后面可以读到 100 这条记录。

    1.2K40

    Linux入侵 反弹shell

    一.简介 黑入服务器很少会是通过账号密码的方式进入,因为这很难破解密码和很多服务器都做了限制白名单。...好了,基本知识说完了,下面我们就探讨一下困扰了我一天的“>&”究竟是什么意思。...首先,我在查资料的过程中虽然没有查到“>&”究竟是什么,但是有一个跟它长得很像的符号却被我发现了,那就是“&>”,它和“2>&1”是一个意思,都是将标准错误输出合并到标准输出中。...接着执行os库的dup2函数来进行重定向。...dup2传入两个文件描述符,fd1和fd2(fd1是必须存在的),如果fd2存在,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,fd2这个文件描述符不会发生变化,但是fd2指向的文件就变成了

    6.2K30

    Linux重定向及缓冲区理解

    程序运行后,显示器上什么也没打印。 可以发现,原本要打印在显示器上的内容竟然神奇地打印到了文件里!!!为什么???...dup2接口:         接下来介绍一个重定向的重要接口dup2,先查一下手册: 简单来说它的功能就是: 将文件描述符表下标为oldfd的内容拷贝到文件描述符下标为newfd的内存中,我们用dup2...运行结果: 因为之前没关1文件,所以它被分配的文件描述符是3,但我们用dup2改变了文件描述符下标为1的内容,将它的内容改为和下标为3的内容一样,做到了重定向; 缓冲区:         在上一篇文件系统中我讲到...,linux每个文件都有自己的文件内核级缓冲区,也就是一段内存空间,但它究竟有什么用?...,根据刷新策略来决定什么时候调用系统调用来刷新到内核级缓冲区,再由内核级缓冲区刷新到文件中。

    8410

    当我们按下电源键,Android 究竟做了些什么?

    二、引导程序 引导程序是 Android 操作系统开始运行前的一个小程序,因此它需要针对特定主板与芯片,并不是 Android 操作系统的一部分。引导程序是OEM厂商或运行商进行加锁、限制的地方。...加载驱动 当内核完成系统设置,接下来即将启动系统的第一个进程 — init 进程 四、init 进程 作为 Android 系统的第一个进程,其PID为0,通过解析 init.rc 脚本来构建出系统初始运行形态...备注:系统中,大多数系统服务程序都是在该脚本中描述并被相继启动的。...,其中最重要的是 ServiceManager、Zygote 和 SystemServer 三者,下面我们逐一解析: 1、ServiceManager — Binder 机制支撑者 概述:ServiceManager...ZygoteInit.main(),第一次进入Java世界; registerZygoteSocket()建立socket通道,zygote作为通信的服务端,用于响应客户端请求; preload()预加载通用类、drawable和color

    1.1K20

    当我们按下电源键,Android 究竟做了些什么?

    相信我们对Android系统都不陌生,而Android系统博大精深,被各种各样的智能设备承载的同时,我们会否好奇过,如此复杂的Android究竟是怎么运作起来的呢?...crash 时,可有机会复原)service []* Options:对 service 的约束选项 五和六...、Zygote 和 SystemServer 三者,下面我们逐一解析: 1 ServiceManager -- Binder 机制支撑者 概述:ServiceManager 是 Binder 机制中的支撑者...ZygoteInit.main(),第一次进入Java世界; registerZygoteSocket()建立socket通道,zygote作为通信的服务端,用于响应客户端请求; preload()预加载通用类、drawable和color...AudioFlinger等)启动,完成后调用 init2、init2 - 新建一个新的带 Looper 的线程 ServerThread来启动 Java层各 Service 后语 上面对 Android 系统启动做了一个简述

    2K140
    领券