C++ 流的哪一端dup2发生了变化?

C++ 流的哪一端dup2发生了变化?,c++,linux,pipe,dup2,C++,Linux,Pipe,Dup2,dub2()改变的是流的哪一端,是操作系统连接到的一端,还是连接到应用程序的一端 int main(){ FILE* file = fopen("test.txt", "w"); // Create file dexcriptor int num = fileno(file); // Convert FILE* to file descriptor dup2(num, STDOUT_FILENO); //

dub2()改变的是流的哪一端,是操作系统连接到的一端,还是连接到应用程序的一端

int main(){
    FILE* file = fopen("test.txt", "w");    // Create file dexcriptor
    int num = fileno(file);       // Convert FILE* to file descriptor
    dup2(num, STDOUT_FILENO);      // Make STDOUT_FILENO an alias to num
    cout << "happy year";
    close(num);
}
intmain(){
FILE*FILE=fopen(“test.txt”,“w”);//创建文件DEXcript
int num=fileno(file);//将文件*转换为文件描述符
dup2(num,STDOUT\u FILENO);//使STDOUT\u FILENO成为num的别名
cout在
dup2()
之前,进程的文件描述符表如下所示:

0 => terminal (stdin)
1 => terminal (stdout)
2 => terminal (stderr)
...
num => file "test.txt"
0 => terminal (stdin)
1 => file "test.txt"
2 => terminal (stderr)
...
num => file "test.txt"
dup2()
之后,它看起来如下所示:

0 => terminal (stdin)
1 => terminal (stdout)
2 => terminal (stderr)
...
num => file "test.txt"
0 => terminal (stdin)
1 => file "test.txt"
2 => terminal (stderr)
...
num => file "test.txt"
实际上还有一个额外的间接层次。内核中有一个用于所有打开流的文件表,并且只有一个条目用于共享打开
test.txt
。两个描述符都指向该文件表条目——这就是允许它们共享文件位置的原因


<> >在C++ I/O子系统中,<代码> cOUT >代码>连接到 StdOutOxFieloo./Cuff>,因此重定向描述符会改变写入到<代码> cOUT/COD> >的编写。< /P>您的问题几乎无法理解,但是<代码> DUP2()
不会更改流的任何结尾,如果目标文件描述符已经打开,它就会失败,就像本例中的情况一样,因为您没有关闭
stdin
。错误检查会揭示这一点。“OS end”与它或流的结尾有什么关系,这是一个谜。@Marqueisoflorne我编辑了这个问题,以便它能更好。我知道它是conf如果dup2没有改变任何东西,那么现在如何打印到文件中,流现在连接到一个文件资源,所以这只是改变了文件描述符的内核端部分,并且仍然不能输出或定向,或者不管是什么术语,文件描述符是1,我的意思是dup2只是改变了管道的内核端lly做得很完美,但为了确保基本正确,除了这不是一个管道,它是一个文件。