cmd_umask.go 702 B

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