• I/O -x dup() dup2()


    dupdup2函数:int dup(int filedes); int dup2(int filedes,int filedes2);

    返回:若成功为新的文件描述符,若出错为-1

    作用:用来复制一个文件描述符,经常用来重定向进程的stdin,stdout,stderr

    dup返回的新文件描述符一定是当前可用文件描述符中最小数值,该新的描述符是传递给它的描述符的拷贝,这意味着这两个描述符共享同一个数据结构。用dup2则可以用filedes2参数指定新描述符的数值,如果filedes2已经打开,则先将其关闭,如果filedes等于filedes2,则dup2返回filedes2,而不关闭它。

    范例:

     1 #include <stdio.h>
     2 
     3 #include <stdlib.h>
     4 
     5 #include <unistd.h>
     6 
     7 #include <sys/stat.h>
     8 
     9 #include <sys/types.h>
    10 
    11 #include <fcntl.h>
    12 
    13 int main(void)
    14 
    15 {
    16 
    17      int fd;
    18 
    19      int fddup;
    20 
    21      int fddup2;
    22 
    23      char buf1[]="Hello, world!";
    24 
    25      char buf2[50];
    26 
    27      if((fd=open("/home/sam/helloworld",O_CREAT|O_TRUNC|O_RDWR,0666))==-1)
    28 
    29      {
    30 
    31          printf("Open or create file named "helloworld" failed.
    ");
    32 
    33          exit(1);
    34 
    35      }
    36 
    37      printf("%d
    ",fd);
    38 
    39      write(fd,buf1,sizeof(buf1));
    40 
    41      close(fd);
    42 
    43  
    44 
    45      if((fd=open("/home/sam/helloworld",O_RDONLY))==-1)
    46 
    47      {
    48 
    49          printf("Open file named "helloworld" failed.
    ");
    50 
    51          exit(1);
    52 
    53      }
    54 
    55      printf("%d
    ",fd);
    56 
    57      fddup=dup(fd);
    58 
    59      fddup2=dup2(fd,8);
    60 
    61      printf("%d
    ",fddup);
    62 
    63      printf("%d
    ",fddup2);
    64 
    65  
    66 
    67      read(fddup2,buf2,sizeof(buf2));
    68 
    69      printf("%s
    ",buf2);
    70 
    71      close(fd);
    72 
    73      close(fddup);
    74 
    75      close(fddup2);
    76 
    77      return 0;
    78 
    79 }
  • 相关阅读:
    Trie
    [转]Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
    [Bzoj2242]常见数值算法
    JavaScript百炼成仙(记录笔记)
    tcpreplay重放报文,tcpdump能抓到包,应用程序收不到包
    用jquery tools来实现选项卡
    ExtNet第二篇
    线性表最简单的表示
    c语言中线性表基本操作方法
    ExtNet第一篇
  • 原文地址:https://www.cnblogs.com/pencil-zh/p/4508159.html
Copyright © 2020-2023  润新知