如何检查程序的stdout
是否已重定向到NUL
?
这样,我可以避免输出数据,因为它毫无意义。
我主要在Windows上需要此功能,但是如果您有Linux解决方案,则将来可能会对其他人有所帮助,因此请随时发布。
最佳答案
可能还有其他方法可以做到这一点(如果事实证明我忽略了某个适当的功能,这也就不足为奇了),但这是一种方法:
enum
{
Output_Console,
Output_File,
Output_NUL,
};
bool GetOutputHandleType(int* piType)
{
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
if (h)
{
BY_HANDLE_FILE_INFORMATION fi;
if (GetFileInformationByHandle(h, &fi))
{
*piType = Output_File;
return true;
}
if (GetLastError() == ERROR_INVALID_FUNCTION)
{
*piType = Output_NUL;
return true;
}
if (GetLastError() == ERROR_INVALID_HANDLE)
{
*piType = Output_Console;
return true;
}
}
return false;
}