匿名管道 的 管道复制(dup)

来源:互联网 发布:能赚集分宝的软件 编辑:程序博客网 时间:2024/06/11 00:12

int dup(int oldfd);

返回值:

-1-----失败

其他---新的文件描述符

int dup2(int oldfd, int newfd);

返回值:

-1--------失败

其他-----返回newfd新的文件描述符

图解:


PS:

tty表示终端,0,1,2表示含义系统默认为下表:

分类文件--------------描述符------------文件号
标准输入------- STDIN_FILENO----------0
标准输出--------- STDOUT_FILENO-----1
标准出错信息---- STDERR_FILENO ----2

dup示例:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>int main(){int fd = dup(STDOUT_FILENO);fprintf(fdopen(fd,"w"),"%d printf:Hello dup\n",fd);}


dup2示例:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#define FILE_MODE (S_IWUSR|S_IRUSR|S_IRGRP|S_IROTH)int main(){int save_fd = dup(STDOUT_FILENO);int fd = open("./test",O_CREAT|O_RDWR,FILE_MODE); if(-1 == dup2(fd,STDOUT_FILENO)){perror("dup2 error0");return 1;}close(fd);printf("%d printf:Hello dup\n",fd);fflush(stdout);// 一定要清除缓冲区,否则会输出到终端if(-1 == dup2(save_fd,STDOUT_FILENO)){perror("dup2 error");return 1;}close(save_fd);printf("%d printf:this is save\n",save_fd);}


0 0
原创粉丝点击