123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- package os
- import (
- "io"
- "syscall"
- )
- func (f *File) Name() string { return f.name }
- var (
- Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
- Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
- Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
- )
- const (
- O_RDONLY int = syscall.O_RDONLY
- O_WRONLY int = syscall.O_WRONLY
- O_RDWR int = syscall.O_RDWR
- O_APPEND int = syscall.O_APPEND
- O_CREATE int = syscall.O_CREAT
- O_EXCL int = syscall.O_EXCL
- O_SYNC int = syscall.O_SYNC
- O_TRUNC int = syscall.O_TRUNC
- )
- const (
- SEEK_SET int = 0
- SEEK_CUR int = 1
- SEEK_END int = 2
- )
- type LinkError struct {
- Op string
- Old string
- New string
- Err error
- }
- func (e *LinkError) Error() string {
- return e.Op + " " + e.Old + " " + e.New + ": " + e.Err.Error()
- }
- func (f *File) Read(b []byte) (n int, err error) {
- if f == nil {
- return 0, ErrInvalid
- }
- n, e := f.read(b)
- if n < 0 {
- n = 0
- }
- if n == 0 && len(b) > 0 && e == nil {
- return 0, io.EOF
- }
- if e != nil {
- err = &PathError{"read", f.name, e}
- }
- return n, err
- }
- func (f *File) ReadAt(b []byte, off int64) (n int, err error) {
- if f == nil {
- return 0, ErrInvalid
- }
- for len(b) > 0 {
- m, e := f.pread(b, off)
- if m == 0 && e == nil {
- return n, io.EOF
- }
- if e != nil {
- err = &PathError{"read", f.name, e}
- break
- }
- n += m
- b = b[m:]
- off += int64(m)
- }
- return
- }
- func (f *File) Write(b []byte) (n int, err error) {
- if f == nil {
- return 0, ErrInvalid
- }
- n, e := f.write(b)
- if n < 0 {
- n = 0
- }
- if n != len(b) {
- err = io.ErrShortWrite
- }
- epipecheck(f, e)
- if e != nil {
- err = &PathError{"write", f.name, e}
- }
- return n, err
- }
- func (f *File) WriteAt(b []byte, off int64) (n int, err error) {
- if f == nil {
- return 0, ErrInvalid
- }
- for len(b) > 0 {
- m, e := f.pwrite(b, off)
- if e != nil {
- err = &PathError{"write", f.name, e}
- break
- }
- n += m
- b = b[m:]
- off += int64(m)
- }
- return
- }
- func (f *File) Seek(offset int64, whence int) (ret int64, err error) {
- if f == nil {
- return 0, ErrInvalid
- }
- r, e := f.seek(offset, whence)
- if e == nil && f.dirinfo != nil && r != 0 {
- e = syscall.EISDIR
- }
- if e != nil {
- return 0, &PathError{"seek", f.name, e}
- }
- return r, nil
- }
- func (f *File) WriteString(s string) (ret int, err error) {
- if f == nil {
- return 0, ErrInvalid
- }
- return f.Write([]byte(s))
- }
- func Mkdir(name string, perm FileMode) error {
- e := syscall.Mkdir(name, syscallMode(perm))
- if e != nil {
- return &PathError{"mkdir", name, e}
- }
- return nil
- }
- func Chdir(dir string) error {
- if e := syscall.Chdir(dir); e != nil {
- return &PathError{"chdir", dir, e}
- }
- return nil
- }
- func (f *File) Chdir() error {
- if f == nil {
- return ErrInvalid
- }
- if e := syscall.Fchdir(f.fd); e != nil {
- return &PathError{"chdir", f.name, e}
- }
- return nil
- }
- func Open(name string) (file *File, err error) {
- return OpenFile(name, O_RDONLY, 0)
- }
- func Create(name string) (file *File, err error) {
- return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
- }
- var lstat = Lstat
- func Rename(oldpath, newpath string) error {
- return rename(oldpath, newpath)
- }
- func fixCount(n int, err error) (int, error) {
- if n < 0 {
- n = 0
- }
- return n, err
- }
|