dup和dup2函数实现

作者: MachinePlay | 来源:发表于2020-01-21 17:30 被阅读0次

dup

unix-liked操作系统中,复制文件描述符的函数dup和dup2

int dup(int i)
int  dup(int i , int cmd, ***)

由于题目要求不能使用fcntl函数,所以考虑使用dup函数来实现,思路如下:

  • 首先对于参数fd2,应当大于等于当前未使用的最小文件描述符,那么如何确定这个最小值呢?想到dup函数的返回值就是dup函数被调用前最小的未使用的文件描述符,设它为fd_min。

  • 如果fd2大于fd_min,只要使从fd_min到fd2这个区间内(不包含fd2)未使用的文件描述符都被占用,那么只要再调用一次函数dup(fd),那么返回值就等于fd2了。

  • 然后考虑如何使区间内未被使用的文件描述符被占用,只要不断调用dup(fd)直到返回值等于fd2即可,之后再将区间内除fd2之外的那些被设置过的文件描述符逐个关闭,这时候我们就成功将fd复制给了fd2.
    ————————————————
    版权声明:本文为CSDN博主「萧-十一」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wait_nothing_alone/article/details/78343987

#include <iostream>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stack>
int my_dup(const int fd1, const int fd2) {
    std::stack<int> fd_stack;
    if (fd1 == fd2)
    {
        return fd2;
     } else {
         int fd_now = 0;
         while(true) {
             fd_now = dup(fd1);
             if(fd_now != fd2) {
                 fd_stack.push(fd_now);
                 continue;
             }
         }
     }
     while(!fd_stack.empty()) {
        int temp = fd_stack.top();
        fd_stack.pop();
        close(temp);
     }
     return fd2;
}

相关文章

  • 函数dup2的理解

    看《UNIX环境高级编程》时,看到书中对函数dup和dup2的描述时,总觉得书中对函数dup2有点没说清楚,不知道...

  • dup和dup2函数实现

    dup unix-liked操作系统中,复制文件描述符的函数dup和dup2 由于题目要求不能使用fcntl函数,...

  • dup实现dup2

    总结:找到一个数时,确保干净要先关闭,再重新打开 while((n = dup(filedes)) < filed...

  • dup 和dup2

    dup 函数原型是 int dup(old_fd),把old_fd下标中的内容拷贝到当前进程文件描述符表中最小的可...

  • dup2函数示例

    1.函数功能 2.程序源码 4.编译源码 5.运行程序 6.查看文件数据

  • 第六章|高级I/O函数

    pipe 创建一个管道,实现进程间通信。 dup、dup2 复制文件描述符实例:cgi服务器原理 B主机执行该程序...

  • Linux dup dup2函数理解

    在linux中,我们需要复制文件描述符,下面是我对文件描述符的理解 int dup(int fd); // 复制一...

  • [APUE习题]不使用fcntl实现dup2函数

    选自《Unix环境高级编程》习题3.2 编写一个与3.12节中dup2功能相同的函数,要求不调用fcntl函数,并...

  • dup2

    dup2(int oldfd,int newfd);这个函数是复制文件描述符,将newfd描述符所对应的文件表 改...

  • 简单的进程间通信模型

    简单的进程间通信模型 关键字: fork, pipe, dup2, signal, SIGCHLD 2018082...

网友评论

    本文标题:dup和dup2函数实现

    本文链接:https://www.haomeiwen.com/subject/mbvezctx.html