如何检查程序的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;
}

09-05 00:33