Windows中读取os.Stdin失败 : /dev/stdout: Access is denied.

luckydogchina · · 2960 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

### 环境: 操作系统:Windows 10 Go Version: go version go1.10.3 windows/amd64 ### 示例代码: ``` counts := make(map[string]int); os.Stdin.Chmod(os.ModeSetuid) input := bufio.NewScanner( os.Stdin); os.Stdin.WriteString("this is a test") for ; ; { if res := input.Scan(); res { test := input.Text(); if test == "exit"{ break; } counts[test]++; }else { fmt.Printf("%s", input.Err()); break; } } ```   在加入os.Stdin.Chmod(os.ModeSetuid)前无法执行成功,加入该行代码后可以执行成功,错误原因: 当前所使用的用户权限不足已读取os.Stdin,下面是创建标注输入输出的源码: D:/programdata/Golang/src/os/file.go ``` var ( Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin") Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout") Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr") ) ```   每次在调用os 包的时候都会创建三个全局的变量,本质上是创建三个绑定在std输出/输入IO的File对象,所以我们像对待普通的File对象一样对待os.Stdin即可,将File的userId 设置为自己当前的user Id ,即可拥有读取权限。

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2960 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传