• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

Golang——os包详解(一)

Data: 2017-07-23 17:00:47Form: JournalClick: 10

os包详解

Go语言的os包中提供了操作系统函数的接口,是一个比较重要的包。顾名思义,os包的作用主要是在服务器上进行系统的基本操作,如文件操作、目录操作、执行命令、信号与中断、进程、系统状态等等。

函数列表:

func Chdir(dir string) error
func Chmod(name string, mode FileMode) error
func Chown(name string, uid, gid int) error
func Chtimes(name string, atime time.Time, mtime time.Time) error
func Clearenv()
func Environ() []string
func Exit(code int)
func Expand(s string, mapping func(string) string) string
func ExpandEnv(s string) string
func Getegid() int
func Getenv(key string) string
func Geteuid() int
func Getgid() int
func Getgroups() ([]int, error)
func Getpagesize() int
func Getpid() int
func Getppid() int
func Getuid() int
func Getwd() (pwd string, err error)
func Hostname() (name string, err error)
func IsExist(err error) bool
func IsNotExist(err error) bool
func IsPathSeparator(c uint8) bool
func IsPermission(err error) bool
func Lchown(name string, uid, gid int) error
func Link(oldname, newname string) error
func Mkdir(name string, perm FileMode) error
func MkdirAll(path string, perm FileMode) error
func NewSyscallError(syscall string, err error) error
func Readlink(name string) (string, error)
func Remove(name string) error
func RemoveAll(path string) error
func Rename(oldname, newname string) error
func SameFile(fi1, fi2 FileInfo) bool
func Setenv(key, value string) error
func Symlink(oldname, newname string) error
func TempDir() string
func Truncate(name string, size int64) error
func Create(name string) (file *File, err error)
func NewFile(fd uintptr, name string) *File
func Open(name string) (file *File, err error)
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
func Pipe() (r *File, w *File, err error)
func (f *File) Chdir() error
func (f *File) Chmod(mode FileMode) error
func (f *File) Chown(uid, gid int) error
func (f *File) Close() error
func (f *File) Fd() uintptr
func (f *File) Name() string
func (f *File) Read(b []byte) (n int, err error)
func (f *File) ReadAt(b []byte, off int64) (n int, err error)
func (f *File) Readdir(n int) (fi []FileInfo, err error)
func (f *File) Readdirnames(n int) (names []string, err error)
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
func (f *File) Stat() (fi FileInfo, err error)
func (f *File) Sync() (err error)
func (f *File) Truncate(size int64) error
func (f *File) Write(b []byte) (n int, err error)
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
func (f *File) WriteString(s string) (ret int, err error)
func Lstat(name string) (fi FileInfo, err error)
func Stat(name string) (fi FileInfo, err error)
func (m FileMode) IsDir() bool
func (m FileMode) Perm() FileMode
func (m FileMode) String() string
func (e *LinkError) Error() string
func (e *PathError) Error() string
func FindProcess(pid int) (p *Process, err error)
func StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error)
func (p *Process) Kill() error
func (p *Process) Release() error
func (p *Process) Signal(sig Signal) error
func (p *Process) Wait() (*ProcessState, error)
func (p *ProcessState) Exited() bool
func (p *ProcessState) Pid() int
func (p *ProcessState) String() string
func (p *ProcessState) Success() bool
func (p *ProcessState) Sys() interface{}
func (p *ProcessState) SysUsage() interface{}
func (p *ProcessState) SystemTime() time.Duration
func (p *ProcessState) UserTime() time.Duration
func (e *SyscallError) Error() string
 

1、Ch系列函数

1.1 func Chdir(dir string) error
  • 参数列表
    • dir 目录路径
  • 返回值:返回error 返回错误信息对象
  • 功能说明:这个函数主要是改变当前工作目录
1.2 func Chmod(name string, mode FileMode) error
  • 参数列表
    • name 修改的文件名
    • mode 文件修改的目标模式
  • 返回值:返回error 返回错误信息对象
  • 功能说明:这个函数主要是修改一个文件的模式,如果文件为一个链接,修改的则是链接的目标文件
1.3 func Chown(name string, uid, gid int) error
  • 参数列表
    • name 修改的文件名
    • uid 用户id
    • gid 用户组id
  • 返回值:返回error 返回错误信息对象
  • 功能说明:这个函数主要是修改一个文件的所属用户和用户组,如果文件为一个链接,修改的则是链接的目标文件
1.4 func Chtimes(name string, atime time.Time, mtime time.Time) error
  • 参数列表
    • name 修改的文件名
    • atime 访问时间
    • mtime 修改时间
  • 返回值:返回error 返回错误信息对象
  • 功能说明:这个函数主要是修改一个文件的访问时间和修改时间
func main() {
	chdirTest()
	chmodTest()
	chownTest()
	chtimesTest()
}

func chtimesTest() {
	fi, err := os.Stat("Hello.go")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Hello.go: atime=%+v, mtime=%v\n", fi.Sys().(*syscall.Stat_t).Atimespec, fi.ModTime())

	err = os.Chtimes("Hello.go", time.Now(), time.Now())
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}

	fi, err = os.Stat("Hello.go")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Now Hello.go: atime=%+v, mtime=%v\n", fi.Sys().(*syscall.Stat_t).Atimespec, fi.ModTime())
}

func chownTest() {
	fi, err := os.Stat("a.txt")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("a.txt: uid=%d, gid=%d\n", fi.Sys().(*syscall.Stat_t).Uid, fi.Sys().(*syscall.Stat_t).Gid)
	//a.txt: uid=501, gid=20

	err = os.Chown("a.txt", 99, 99) //nobody, nobody
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}

	fi, err = os.Stat("a.txt")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Now a.txt: uid=%d, gid=%d\n", fi.Sys().(*syscall.Stat_t).Uid, fi.Sys().(*syscall.Stat_t).Gid)
	//Now a.txt: uid=99, gid=99
}

func chmodTest() {
	fi, err := os.Stat("a.txt")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("a.txt's mode is: %s(%o)\n", fi.Mode(), fi.Mode()&0777)
	//a.txt's mode is: -rw-r--r--(644)

	err = os.Chmod("a.txt", 0777)
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}

	fi, err = os.Stat("a.txt")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Now a.txt's mode is: %s(%o)\n", fi.Mode(), fi.Mode()&0777)
	//Now a.txt's mode is: -rwxrwxrwx(777)
}

func chdirTest() {
	pwd, err := os.Getwd()
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("The current directory is: %s\n", pwd) //The current directory is: /Users/acton_zhang/go/gobook

	if err = os.Chdir("go-study"); err != nil {
		fmt.Printf("Error: %s\n", err) //Error: chdir go-study: no such file or directory
		return
	}

	pwd, err = os.Getwd()
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Now the current directory is: %s\n", pwd)
}
 

2、File系列函数

2.1 func (f *File) Chdir() error
  • 参数列表: 无
  • 返回值:返回error 返回错误信息对象
  • 功能说明:这个函数主要是改变当前工作目录,f必须是一个目录的信息
2.2 func (f *File) Chmod(mode FileMode) error
  • 参数列表
  • mode 文件修改的目标模式
  • 返回值:返回error 返回错误信息对象
  • 功能说明:这个函数主要是修改文件的模式
2.3 func (f *File) Chown(uid, gid int) error
  • 参数列表
    • uid 用户id
    • gid 用户组id
  • 返回值:返回error 返回错误信息对象
  • 功能说明:这个函数主要是修改文件的所属用户和用户组
func main() {
	fileChdirTest()
	fileChmod()
	fileChown()
}

func fileChown() {
	fi, err := os.Stat("Hello.go")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Hello.go: uid=%d, gid=%d\n", fi.Sys().(*syscall.Stat_t).Uid, fi.Sys().(*syscall.Stat_t).Gid)

	f, _ := os.Open("Hello.go")
	err = f.Chown(99, 99) //nobody, nobody
	if err != nil {
		fmt.Printf("Error: %s\n", err)
	}
	f.Close()

	fi, err = os.Stat("Hello.go")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Now Hello.go: uid=%d, gid=%d\n", fi.Sys().(*syscall.Stat_t).Uid, fi.Sys().(*syscall.Stat_t).Gid)
}

func fileChmod() {
	fi, err := os.Stat("Hello.go")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Hello.go's mode is: %s(%o)\n", fi.Mode(), fi.Mode()&0777)

	f, _ := os.Open("Hello.go")
	err = f.Chmod(0777)
	if err != nil {
		fmt.Printf("Error: %s\n", err)
	}
	f.Close()

	fi, err = os.Stat("Hello.go")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("Now Hello.go's mode is: %s(%o)\n", fi.Mode(), fi.Mode()&0777)
}

func fileChdirTest() {
	pwd, err := os.Getwd()
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	fmt.Printf("The current directory is: %s\n", pwd)

	f, _ := os.Open("World")
	if err = f.Chdir(); err != nil {
		fmt.Printf("Error: %s\n", err)
	}

	pwd, err = os.Getwd()
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	<              
Name:
<提交>