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

  • 相关阅读:
    长连接与短连接
    服务器配置tomact service
    数据库权限表设计
    VPS搭建离线下载服务器——后网盘时代
    Unix socket的准备(一)
    LeetCode 650
    C++11获取线程的返回值
    柔性数组成员——不定长的数据结构
    看懂类图——UML类图基础
    Java类初始化顺序
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/6281810.html
Copyright © 2011-2022 走看看