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?