zoukankan      html  css  js  c++  java
  • APUE 习题3-2 实现dup2,要求不使用fcntl函数。

    int mydup2(int oldfd, int newfd)
    {
        int tfd = 0;
        if (newfd < 0)
        {
            err_sys("newfd < 0");
        }
        if (newfd == oldfd)
        {
            return oldfd;
        }
     
        while(1)
        {
            tfd = dup(oldfd);
     
            if (tfd == newfd)
            {
                return newfd;
            }
            else if (tfd > newfd)
            {
                close(newfd);
            }
        }
    }
     
    测试:
    #include "apue.h"
    #include <fcntl.h>
     
    int mydup2(int oldfd, int newfd);
    int main(void)
    {
        int fd = 0;
        fd = open("testdup2.dat", O_RDWR | O_CREAT | O_TRUNC);
        if (fd < 0)
        {
            printf("open error. ");
            return -1;
        }
     
        if (mydup2(fd, STDOUT_FILENO) < 0)
        {
            printf("mydup2 error ");
            return -1;
        }
     
        printf("slk ");
     
        return 0;
    }
     
    int mydup2(int oldfd, int newfd)
    {
        int tfd = 0;
        if (newfd < 0)
        {
            err_sys("newfd < 0");
        }
        if (newfd == oldfd)
        {
            return oldfd;
        }
     
        while(1)
        {
            tfd = dup(oldfd);
     
            if (tfd == newfd)
            {
                return newfd;
            }
            else if (tfd > newfd)
            {
                close(newfd);
            }
        }
    }
     
    可以把输出重定向到testdup2.dat,成功
  • 相关阅读:
    Prometheus+Grafana监控
    交互式查询⼯具Impala
    langsong
    linux awk命令详解
    k8s环境下处理容器时间问题的多种姿势
    Golang数据类型之结构体-下篇
    Syntax Error: TypeError: this.getOptions is not a function报错
    百度地图开发-绘制点线提示框 07
    百度地图开发-与地图的交互功能 06
    百度地图开发-实现离线地图功能 05
  • 原文地址:https://www.cnblogs.com/shenlinken/p/5732817.html
Copyright © 2011-2022 走看看