zoukankan      html  css  js  c++  java
  • dup的使用(二)

    转自:http://blog.csdn.net/yeyuangen/article/details/6852682

    一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell
    中运行一个进程,默认会有3个文件描述符存在(0、1、2), 0与进程的标准输入相关联,
    1与进程的标准输出相关联,2与进程的标准错误输出相关联,一个进程当前有哪些打开
    的文件描述符可以通过/proc/进程ID/fd目录查看


    int oldfd;
    oldfd = open("app_log", (O_RDWR | O_CREATE), 0644 );
    dup2( oldfd, 1 );
    close( oldfd );
    本例中,我们打开了一个新文件,称为“app_log”,并收到一个文件描述符,该描述符叫做oldfd。我们调用dup2函数,参数为oldfd和1,这会
    导致用我们新打开的文件描述符替换掉由1代表的文件描述符(即stdout,因为标准输出文件的id为1)。任何写到stdout的东西,现在都将改为写
    入名为“app_log”的文件中。需要注意的是,dup2函数在复制了oldfd之后,调用了close( oldfd ),但不会关掉新近打开的文件,因为文件描述
    符1现在也指向它

    dup2和dup的区别就是可以用newfd参数指定新描述符的数值,如果newfd已经打开,则
    先将其关闭。如果newfd等于oldfd,则dup2返回newfd, 而不关闭它。dup2函数返回的新
    文件描述符同样与参数oldfd共享同一文件表项。
    实际上,调用dup(oldfd);
    等效与
    fcntl(oldfd, F_DUPFD, 0)
    而调用dup2(oldfd, newfd);
    等效与
    close(oldfd);
    fcntl(oldfd, F_DUPFD, newfd);

  • 相关阅读:
    JAVA 框架
    npm安装超时,使用淘宝镜像
    使用vite搭建Vue3项目
    前端常用框架
    vue发布自己的组件库-vue3
    vue2升级vue3-基础教程
    Navicat Premium 15破解失败解决方案
    大屏
    vue使用高德地图
    vue生命周期及钩子函数
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/6281810.html
Copyright © 2011-2022 走看看