package main import ( "fmt" "os" "strconv" "syscall" ) // 显示或设置umask func cmd_umask(fields []string, stdin *os.File, stdout *os.File, stderr *os.File) { if len(fields) > 2 { // 最多1个参数 panic("umask: too many arguments") } if len(fields) == 1 { // 如果没有参数 old := syscall.Umask(022) // 修改并保存旧umask syscall.Umask(old) // 修改成旧umask,保持不变 fmt.Fprintf(stdout, "%04o\n", old) // 输出umask } else { new, err := strconv.ParseInt(fields[1], 8, 0) // 字符串转8进制数 if err != nil { panic("umask: " + fields[1] + ": numeric argument required") } syscall.Umask(int(new)) // 修改umask } }