首页
学习
活动
专区
工具
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就该这么学

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

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

    3. dup()和dup2()函数 包含头文件 #include 函数原型 int dup(int oldfd); int dup2(int oldfd, int newfd);...并且让这个文件描述符指向oldfd所指向的文件;dup() uses the lowest-numbered unused descriptor for the new descriptor. dup2...(oldfd, newfd):重定向,关闭newfd对应的文件使文件描述符newfd空闲,然后让newfd指向oldfd所指向的文件;dup2() makes newfd be the copy of...If oldfd is a valid file descriptor, and newfd has the same value as oldfd, then dup2() does nothing...注意:这里的 "hello\ linux" 中,"\ " 使通过转义符把空格的特殊含义去掉,如果不加转义符,shell会把空格分开的内容当作两个字符串,通过转义符就可以实现在字符串中写入空格,这是shell

    20310

    【Linux】重定向操作的原理:修改文件描述符fd底层指向 (文件系统角度理解)

    上层fd不变(read,fgets,scanf),底层fd指向的内容改变 一.文件描述符基础知识 Linux进程默认情况下会有3个缺省打开的文件描述符,分别是 stdin标准输入0, stdout标准输出...1, stderro标准错误2. 0,1,2对应的 物理设备 一般是: 键盘,显示器,显示器 二.dup2函数介绍 我们先了解这个dup2函数,功能是改变 底层fd的指向 #include int dup2(int oldfd, int newfd); 参数: oldfd:这是你想要复制的文件描述符。...底层访问文件的时候,找的还是fd:1, 但此时,fd:1下标所表示内容,已经变成了myfile的地址,不再是显示器文件的地址,所以,输出的任何消息都会往文件中写入,进而完成输出重定向 底层等效于dup2

    20810

    六.Linux管道及重定向

    Linux管道及重定向 对shell有一定了解的人都知道,管道和重定向是 Linux 中非常实用的 IPC 机制。在shell中,我们通常使用符合‘|’来表示管道,符号‘>’和‘<’表示重定向。...示例代码如下: int fd[2]; pipe(fd); pid=fork(); if(0==pid)//execute next command in child process { dup2...那么, 在子进程中,先调用dup2(fd[0],0);此函数就是将标准输入的文件描述符 0,指向了管道的读端。...调用dup2(fd[0],0),实际上就是将文件描述符 3 指向的文件表项赋值给了文件描述符 0,而文件描述符 0 正是进程默认的标准输入。...完整代码实现请参考StupidShell代码仓库 声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/linux%e7%ae%a1%e9%81%93%

    2.4K20

    【Linux】基础IO_文件描述符与重定向

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制...Linux系统下进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。...因此有一种更好的方法,即系统提供了一个函数——dup2函数。...所以假如我们要将1号文件描述符的指向的文件修改为fd对应的文件,应该这样来写:dup2(fd,1),这就是输出重定向,当然输入重定向就是:dup2(fd,0)。...dup2原理: dup2函数的原理实际上就是通过拷贝的方式,修改原来文件描述符表中特定下标所指向的文件,这里需要注意一点的是,dup2函数在实现重定向时,会先将原有的文件描述符指向的对应的文件关闭,这样避免内存泄漏问题的出现

    28130

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

    用指针的观点来深入理解dup和dup2的用法 作者:ejian 2007-09-17 网上有很多资料详细讲解了dup和dup2的用法,有讲得不错的,但总感觉理解起来还是有点困难,通过实践,我发现一种C程序更容易理解的讲解方法...-使用类比指针的方法来阐述dup和dup2的用法,可能更容易让人在非常短的时间内接受,下面的内容是我理解dup和dup2用法的总结,希望对dup和dup2存有疑惑的朋友所有帮助。...下面创建管道 int fd[2]; pipe(fd); // 下面这句相当于: // STDIN_FILENO = fd[0]; // 从这里可以看出STDIN_FILENO和stdinp指向了不同的位置 dup2...STDIN_FILENO可以替代fd[0]了,close(fd[0])相当于 // fd[0] = NULL; // 将fd[0]指向一个有效的安全值,关闭它 // 下面再说说如何恢复: // 只需要执行: dup2...不过,还有一点要请各位注意,dup和dup2的改变指向时会分配内存,所以在不使用时要记得打开,否则 你可能遇到“打开的文件过多”的错误,比如: int* stdinp =dup(STDIN_FILENO

    1.3K10

    Linux:基础IO(一.C语言文件接口与系统调用、默认打开的文件流、详解文件描述符与dup2系统调用)

    4.相关系统接口 4.1open() 4.2umask()函数 4.3close()、write()、read() 5.文件描述符 5.1 0、1、2 5.2底层 6.文件描述符的分配规则 重定向—dup2...()系统调用 dup2() 是一个系统调用,用于复制文件描述符。...它的原型如下: #include int dup2(int oldfd, int newfd); dup2() 系统调用的作用是将 oldfd 文件描述符复制到 newfd 文件描述符处...,所以就大用了各种设备的函数了 在Linux中,“一切皆文件”(Everything is a file)是一个重要的概念,它体现了Linux操作系统的设计哲学。...文件描述符: Linux 中每个进程都有一个文件描述符表,用于跟踪打开的文件和设备。

    37810

    【Linux探索学习】第二十一弹——文件描述符和输出重定向:深入解析Linux操作系统中的文件描述符与输出重定向的底层机制

    Linux 提供了非常灵活的方式来实现输出重定向。...就会先找到1号文件,因为1号显示器文件已经被关闭,所以往屏幕上输出内容的操作不能奏效了,而且内容也被写入在log.txt中 所以说重定向的原理就是文件描述符指向的内容的修改(个人理解) 3.2 dup2...系统调用来实现重定向 首先我们先来通过man手册来看一下dup2的基本用法 man dup 我们可以看到关于dup的系统调用接口有两个,我们需要掌握的主要是第二个 我们上面的那种重定向的方法使用起来是比较繁琐的...,我们必须先关闭1号文件,然后再打开新文件时才能成功,其实也可以通过dup2系统调用的方法直接实现上面的结果 来看看上面同样的代码我们如何用dup2来实现: #include #include...因为文件描述符是数组的下标,所以不可能小于0,小于0就是失败 { perror("open file"); return 1; } //重定向 dup2

    11310
    领券