Windows中讀取os.Stdin失敗 : /dev/stdout: Access is denied.
來源:互聯網
上載者:User
### 環境:作業系統: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 ,即可擁有讀取許可權。63 次點擊