Package fileutil implements utility functions related to files and paths.



    View Source
    const (
    	F_OFD_GETLK  = 37
    	F_OFD_SETLK  = 37
    	F_OFD_SETLKW = 38

      This used to call syscall.Flock() but that call fails with EBADF on NFS. An alternative is lockf() which works on NFS but that call lets a process lock the same file twice. Instead, use Linux's non-standard open file descriptor locks which will block if the process already holds the file lock.

      constants from /usr/include/bits/fcntl-linux.h

      View Source
      const (
      	// PrivateDirMode grants owner to make/remove files inside the directory.
      	PrivateDirMode = 0700
      View Source
      const (
      	// PrivateFileMode grants owner to read/write a file.
      	PrivateFileMode = 0600


      View Source
      var (
      	ErrLocked = errors.New("fileutil: file already locked")


      func CheckDirPermission

      func CheckDirPermission(dir string, perm os.FileMode) error

        CheckDirPermission checks permission on an existing dir. Returns error if dir is empty or exist with a different permission than specified.

        func CreateDirAll

        func CreateDirAll(dir string) error

          CreateDirAll is similar to TouchDirAll but returns error if the deepest directory was not empty.

          func Exist

          func Exist(name string) bool

          func Fdatasync

          func Fdatasync(f *os.File) error

            Fdatasync is similar to fsync(), but does not flush modified metadata unless that metadata is needed in order to allow a subsequent data retrieval to be correctly handled.

            func Fsync

            func Fsync(f *os.File) error

              Fsync is a wrapper around file.Sync(). Special handling is needed on darwin platform.

              func IsDirWriteable

              func IsDirWriteable(dir string) error

                IsDirWriteable checks if dir is writable by writing and removing a file to dir. It returns nil if dir is writable.

                func OpenDir

                func OpenDir(path string) (*os.File, error)

                  OpenDir opens a directory for syncing.

                  func Preallocate

                  func Preallocate(f *os.File, sizeInBytes int64, extendFile bool) error

                    Preallocate tries to allocate the space for given file. This operation is only supported on linux by a few filesystems (btrfs, ext4, etc.). If the operation is unsupported, no error will be returned. Otherwise, the error encountered will be returned.

                    func PurgeFile

                    func PurgeFile(dirname string, suffix string, max uint, interval time.Duration, stop <-chan struct{}) <-chan error

                    func PurgeFileWithDoneNotify

                    func PurgeFileWithDoneNotify(dirname string, suffix string, max uint, interval time.Duration, stop <-chan struct{}) (<-chan struct{}, <-chan error)

                    func ReadDir

                    func ReadDir(dirpath string) ([]string, error)

                      ReadDir returns the filenames in the given directory in sorted order.

                      func TouchDirAll

                      func TouchDirAll(dir string) error

                        TouchDirAll is similar to os.MkdirAll. It creates directories with 0700 permission if any directory does not exists. TouchDirAll also ensures the given directory is writable.

                        func ZeroToEnd

                        func ZeroToEnd(f *os.File) error

                          ZeroToEnd zeros a file starting from SEEK_CUR to its SEEK_END. May temporarily shorten the length of the file.


                          type LockedFile

                          type LockedFile struct{ *os.File }

                          func LockFile

                          func LockFile(path string, flag int, perm os.FileMode) (*LockedFile, error)

                          func TryLockFile

                          func TryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error)