为了账号安全,请及时绑定邮箱和手机立即绑定

console.cs IsHandle重定向的奇数

console.cs IsHandle重定向的奇数

C#
一只萌萌小番薯 2021-04-28 09:09:23
MS自己的console.cs具有以下功能,由IsInput / Output / ErrorRedirected API使用。private static bool IsHandleRedirected(IntPtr ioHandle) {    // Need this to use GetFileType:    SafeFileHandle safeIOHandle = new SafeFileHandle(ioHandle, false);    // If handle is not to a character device, we must be redirected:    int fileType = Win32Native.GetFileType(safeIOHandle);    if ((fileType & Win32Native.FILE_TYPE_CHAR) != Win32Native.FILE_TYPE_CHAR) // <--- ??        return true;    // We are on a char device.    // If GetConsoleMode succeeds, we are NOT redirected.    int mode;    bool success = Win32Native.GetConsoleMode(ioHandle, out mode);    return !success;}我不明白(由我自己)标记的那一行的逻辑// <--- ??。,这是有道理的if (fileType != Win32Native.FILE_TYPE_CHAR) return true;,但是& Win32Native.FILE_TYPE_CHAR在进行比较之前,我不明白为什么它被掩盖了。更令人困惑的FILE_TYPE_CHAR是,常量是0x0002也由共享的单个位FILE_TYPE_PIPE = 0x0003,因此,如果文件句柄指向管道,则所if讨论的语句将不会return true;(GetConsoleMode此后可能依赖于失败?)。对于为什么以这种方式编写代码的任何见解,将不胜感激。谢谢。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信