• 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);

  • 相关阅读:
    各种小知识
    基础技能
    st表
    有理数取余
    FFT加速高精度乘法
    unique
    离散化
    线段树复杂度分析
    楼房重建
    电脑装系统常用方法
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/6281810.html
Copyright © 2020-2023  润新知