dup2(int fd1,int fd2)//将fd1描述符复制到fd2,这样fd1和fd2都将指向同一文件表项,那么对这些描述符的操作实际是对这个文件表项的操作,这里举个例子:将一个打开的文件描述符fd复制到标准输入STDIN_FILENO,那么一切从标准输入读取数据的操作等将从fd的文件表项读取数据
程序dup.cpp
#include <sys/types.h>//这里空一个的目的是:cin是使用空白(空格,制表符和换行符)来定字符串的界的,那么输出结果是#include而不是#include <sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<iostream>
using namespace std;
int main(int argc,char* argv[]){
int fd=open(argv[1],O_RDWR);//打开文件argv[1]即打开本代码文件
dup2(fd,STDIN_FILENO);
string s;
cin>>s;//cin是使用空白(空格,制表符和换行符)来定字符串的界的
cout<<s<<endl;
return 0;
}
执行./dup dup.cpp
结果: