Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;重定向输出 有没有办法在代码中重定向C++输出? 情况是这样的,我正在使用一些外部的.cpp和.h文件,它们使用printf向控制台发出警告。我希望“仅”将这些输出(不是我的)重定向到一个文件,而“不”修改它们的代码_C++_Redirect - Fatal编程技术网

C++;重定向输出 有没有办法在代码中重定向C++输出? 情况是这样的,我正在使用一些外部的.cpp和.h文件,它们使用printf向控制台发出警告。我希望“仅”将这些输出(不是我的)重定向到一个文件,而“不”修改它们的代码

C++;重定向输出 有没有办法在代码中重定向C++输出? 情况是这样的,我正在使用一些外部的.cpp和.h文件,它们使用printf向控制台发出警告。我希望“仅”将这些输出(不是我的)重定向到一个文件,而“不”修改它们的代码,c++,redirect,C++,Redirect,所以,;在我的程序中,我可以将输出重定向到一个文件,当我将一些输出重定向到默认控制台时,然后再重定向到文件,依此类推 有可能吗?printf将打印到文件描述符1,您可以关闭它并打开一个文件,这将为您提供另一个fd,可能是1,因为它是可用的最低fd,如果您不够快的话 如果您只是关闭(1)然后intfd=open(文件)fd应为1。此时,任何输出到fd编号1的人都将打印到您的文件中 这是因为系统应该为您提供最低可用文件描述符编号,因此它将为您提供1,这正是printf写入的位置 正如@roe所提到的

所以,;在我的程序中,我可以将输出重定向到一个文件,当我将一些输出重定向到默认控制台时,然后再重定向到文件,依此类推


有可能吗?

printf将打印到文件描述符1,您可以关闭它并打开一个文件,这将为您提供另一个fd,可能是1,因为它是可用的最低fd,如果您不够快的话

如果您只是
关闭(1)然后
intfd=open(文件)fd应为1。此时,任何输出到fd编号1的人都将打印到您的文件中

这是因为系统应该为您提供
最低可用文件描述符编号
,因此它将为您提供1,这正是printf写入的位置


正如@roe所提到的,您可能更喜欢先执行dup()而不是1,以获得另一个fd编号,您可以在其中打印到标准输出。

您可以在标准输出上使用freopen()将标准输出重定向到文件。

如果您想继续将自己的内容打印到标准输出,您应该先执行
dup()
它。然后,如果需要,您可以使用
dup2()
来回切换。或者将您自己的数据直接写入复制的fd。。。我想那会更好。当然,假设一个POSIX系统,即使这样,你也在做一些潜在的危险的事情,重新打开()完全符合要求。C库和POSIX不能很好地混合。我总是把open()/read()/write()/close()和fopen()/fread()/fwrite()/fclose()分开。@roe你的dup是对的,@DevSolar是的,使用POSIX系统它会一直持续到程序结束吗?我是否需要以某种方式将其转换回put to console?