c - 如何检查标准输出是否已在 Windows 上重定向到 NUL(在 Linux 上也称为/dev/null)?

标签 c winapi visual-c++ stdout

如何检查我的程序的 stdout已重定向至 NUL ?
这样我就可以避免输出数据,因为它毫无意义。

我主要在 Windows 上需要这个,但如果你有一个 Linux 解决方案,它可能在 future 对其他人有帮助,所以也可以随意发布。

最佳答案

可能还有其他方法可以做到这一点(如果我忽略了它的正确功能,那就不足为奇了),但这是一种方法:

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;
}

关于c - 如何检查标准输出是否已在 Windows 上重定向到 NUL(在 Linux 上也称为/dev/null)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069853/

相关文章:

c++ - 一次发送一些字节

sprintf 导致字符数组溢出

c - 重命名文件预操作 Windows Minifilter 驱动程序

c++ - 阻塞的 send() 会立即返回吗?

C++/CLI 和编译器选择

c - 是否可以#Include 到 "diamond inheritance"结构中?

c++ - GetVolumeInformation() 产生不同的磁盘序列号

c++ - SetWindowPos中的客户坐标是什么意思

c++ - 当我使用可变参数时,它适用于 int 和 double,但是当涉及到 float 时,就会出错

c++ - 已在 *.obj 中定义