Spec-Zone.ru › Go

Пакет os

  • import "os"
  • Обзор
  • Индекс
  • Примеры
  • Подкаталоги

Обзор

Пакет os предоставляет платформенно-независимый интерфейс к функционалу операционной системы. Дизайн похож на Unix, хотя обработка ошибок выполняется в стиле Go; вызываемые функции возвращают значения типа error вместо чисел ошибок. Часто дополнительная информация доступна в ошибке. Например, если вызов, принимающий имя файла, завершается ошибкой, например, Open или Stat, в ошибке будет содержаться имя файла, при выводе, и она будет типа *PathError, который можно распаковать для получения дополнительной информации.

Интерфейс os предназначен для единообразного использования на всех операционных системах. Функции, обычно недоступные, находятся в зависимом от системы пакете syscall.

Вот простой пример открытия файла и чтения части его содержимого.

file, err := os.Open("file.go") // For read access.
if err != nil {
	log.Fatal(err)
}

Если открытие файла завершилось ошибкой, строка ошибки будет понятной, например

open file.go: no such file or directory

Затем данные файла могут быть считаны в срез байтов. Read и Write берут количество байтов из длины аргумента-среза.

data := make([]byte, 100)
count, err := file.Read(data)
if err != nil {
	log.Fatal(err)
}
fmt.Printf("read %d bytes: %q\n", count, data[:count])

Конкурентность

Методы File соответствуют операциям файловой системы. Все они безопасны для одновременного использования. Максимальное количество одновременных операций с File может быть ограничено ОС или системой. Это число должно быть высоким, но превышение его может ухудшить производительность или вызвать другие проблемы.

Индекс

  • Константы
  • Переменные
  • 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 CopyFS(dir string, fsys fs.FS) error
  • func DirFS(dir string) fs.FS
  • func Environ() []string
  • func Executable() (string, error)
  • 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() (dir 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 IsTimeout(err error) bool
  • func Lchown(name string, uid, gid int) error
  • func Link(oldname, newname string) error
  • func LookupEnv(key string) (string, bool)
  • func Mkdir(name string, perm FileMode) error
  • func MkdirAll(path string, perm FileMode) error
  • func MkdirTemp(dir, pattern string) (string, error)
  • func NewSyscallError(syscall string, err error) error
  • func Pipe() (r *File, w *File, err error)
  • func ReadFile(name string) ([]byte, error)
  • func Readlink(name string) (string, error)
  • func Remove(name string) error
  • func RemoveAll(path string) error
  • func Rename(oldpath, newpath 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 Unsetenv(key string) error
  • func UserCacheDir() (string, error)
  • func UserConfigDir() (string, error)
  • func UserHomeDir() (string, error)
  • func WriteFile(name string, data []byte, perm FileMode) error
  • тип DirEntry
  • func ReadDir(name string) ([]DirEntry, error)
  • тип File
  • func Create(name string) (*File, error)
  • func CreateTemp(dir, pattern string) (*File, error)
  • func NewFile(fd uintptr, name string) *File
  • func Open(name string) (*File, error)
  • func OpenFile(name string, flag int, perm FileMode) (*File, error)
  • func OpenInRoot(dir, name string) (*File, 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) ([]DirEntry, error)
  • func (f *File) ReadFrom(r io.Reader) (n int64, err error)
  • func (f *File) Readdir(n int) ([]FileInfo, 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) SetDeadline(t time.Time) error
  • func (f *File) SetReadDeadline(t time.Time) error
  • func (f *File) SetWriteDeadline(t time.Time) error
  • func (f *File) Stat() (FileInfo, error)
  • func (f *File) Sync() error
  • func (f *File) SyscallConn() (syscall.RawConn, 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) (n int, err error)
  • func (f *File) WriteTo(w io.Writer) (n int64, err error)
  • тип FileInfo
  • func Lstat(name string) (FileInfo, error)
  • func Stat(name string) (FileInfo, error)
  • тип FileMode
  • тип LinkError
  • func (e *LinkError) Error() string
  • func (e *LinkError) Unwrap() error
  • тип PathError
  • тип ProcAttr
  • тип Process
  • func FindProcess(pid int) (*Process, 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)
  • тип ProcessState
  • func (p *ProcessState) ExitCode() int
  • func (p *ProcessState) Exited() bool
  • func (p *ProcessState) Pid() int
  • func (p *ProcessState) String() string
  • func (p *ProcessState) Success() bool
  • func (p *ProcessState) Sys() any
  • func (p *ProcessState) SysUsage() any
  • func (p *ProcessState) SystemTime() time.Duration
  • func (p *ProcessState) UserTime() time.Duration
  • тип Root
  • func OpenRoot(name string) (*Root, error)
  • func (r *Root) Close() error
  • func (r *Root) Create(name string) (*File, error)
  • func (r *Root) FS() fs.FS
  • func (r *Root) Lstat(name string) (FileInfo, error)
  • func (r *Root) Mkdir(name string, perm FileMode) error
  • func (r *Root) Name() string
  • func (r *Root) Open(name string) (*File, error)
  • func (r *Root) OpenFile(name string, flag int, perm FileMode) (*File, error)
  • func (r *Root) OpenRoot(name string) (*Root, error)
  • func (r *Root) Remove(name string) error
  • func (r *Root) Stat(name string) (FileInfo, error)
  • тип Signal
  • тип SyscallError
  • func (e *SyscallError) Error() string
  • func (e *SyscallError) Timeout() bool
  • func (e *SyscallError) Unwrap() error

Примеры

Chmod
Chtimes
CreateTemp
CreateTemp (Суффикс)
ErrNotExist
Expand
ExpandEnv
FileMode
Getenv
LookupEnv
Mkdir
MkdirAll
MkdirTemp
MkdirTemp (Суффикс)
OpenFile
OpenFile (Добавить)
ReadDir
ReadFile
Readlink
Unsetenv
UserCacheDir
UserConfigDir
WriteFile

Пакетные файлы

dir.go dir_unix.go dirent_linux.go eloop_other.go env.go error.go error_errno.go exec.go exec_linux.go exec_posix.go exec_unix.go executable.go executable_procfs.go file.go file_open_unix.go file_posix.go file_unix.go getwd.go path.go path_unix.go pidfd_linux.go pipe2_unix.go proc.go rawconn.go removeall_at.go root.go root_nonwindows.go root_openat.go root_unix.go stat.go stat_linux.go stat_unix.go sticky_notbsd.go sys.go sys_linux.go sys_unix.go tempfile.go types.go types_unix.go wait_waitid.go zero_copy_linux.go zero_copy_posix.go

Константы

Флаги для OpenFile, которые содержат флаги базовой системы. Не все флаги могут быть реализованы в данной системе.

const (
    // Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.
    O_RDONLY int = syscall.O_RDONLY // open the file read-only.
    O_WRONLY int = syscall.O_WRONLY // open the file write-only.
    O_RDWR   int = syscall.O_RDWR   // open the file read-write.
    // The remaining values may be or'ed in to control behavior.
    O_APPEND int = syscall.O_APPEND // append data to the file when writing.
    O_CREATE int = syscall.O_CREAT  // create a new file if none exists.
    O_EXCL   int = syscall.O_EXCL   // used with O_CREATE, file must not exist.
    O_SYNC   int = syscall.O_SYNC   // open for synchronous I/O.
    O_TRUNC  int = syscall.O_TRUNC  // truncate regular writable file when opened.
)

Значения Seek whence.

Устарело: Используйте io.SeekStart, io.SeekCurrent и io.SeekEnd.

const (
    SEEK_SET int = 0 // seek relative to the origin of the file
    SEEK_CUR int = 1 // seek relative to the current offset
    SEEK_END int = 2 // seek relative to the end
)
const (
    PathSeparator     = '/' // OS-specific path separator
    PathListSeparator = ':' // OS-specific path list separator
)

Определённые биты режима файла — это самые значащие биты FileMode. Девять наименее значащих битов — это стандартные Unix разрешения rwxrwxrwx. Значения этих битов должны рассматриваться как часть публичного API и могут использоваться в проводных протоколах или представлении на диске: их нельзя изменять, хотя могут быть добавлены новые биты.

const (
    // The single letters are the abbreviations
    // used by the String method's formatting.
    ModeDir        = fs.ModeDir        // d: is a directory
    ModeAppend     = fs.ModeAppend     // a: append-only
    ModeExclusive  = fs.ModeExclusive  // l: exclusive use
    ModeTemporary  = fs.ModeTemporary  // T: temporary file; Plan 9 only
    ModeSymlink    = fs.ModeSymlink    // L: symbolic link
    ModeDevice     = fs.ModeDevice     // D: device file
    ModeNamedPipe  = fs.ModeNamedPipe  // p: named pipe (FIFO)
    ModeSocket     = fs.ModeSocket     // S: Unix domain socket
    ModeSetuid     = fs.ModeSetuid     // u: setuid
    ModeSetgid     = fs.ModeSetgid     // g: setgid
    ModeCharDevice = fs.ModeCharDevice // c: Unix character device, when ModeDevice is set
    ModeSticky     = fs.ModeSticky     // t: sticky
    ModeIrregular  = fs.ModeIrregular  // ?: non-regular file; nothing else is known about this file

    // Mask for the type bits. For regular files, none will be set.
    ModeType = fs.ModeType

    ModePerm = fs.ModePerm // Unix permission bits, 0o777
)

DevNull — это имя «нулевого устройства» операционной системы. В системах типа Unix это «/dev/null», в Windows — «NUL».

const DevNull = "/dev/null"

Переменные

Переносные аналоги некоторых распространённых ошибок системных вызовов.

Возвращаемые из этого пакета ошибки могут быть проверены на соответствие этим ошибкам с помощью errors.Is.

var (
    // ErrInvalid indicates an invalid argument.
    // Methods on File will return this error when the receiver is nil.
    ErrInvalid = fs.ErrInvalid // "invalid argument"

    ErrPermission = fs.ErrPermission // "permission denied"
    ErrExist      = fs.ErrExist      // "file already exists"
    ErrNotExist   = fs.ErrNotExist   // "file does not exist"
    ErrClosed     = fs.ErrClosed     // "file already closed"

    ErrNoDeadline       = errNoDeadline()       // "file type does not support deadline"
    ErrDeadlineExceeded = errDeadlineExceeded() // "i/o timeout"
)

Stdin, Stdout и Stderr — это открытые файлы, указывающие на стандартный ввод, стандартный вывод и стандартный вывод ошибок.

Обратите внимание, что среда выполнения Go записывает в стандартный вывод ошибок при панике и сбоях; закрытие Stderr может привести к тому, что эти сообщения будут отправлены в другое место, возможно, в файл, открытый позже.

var (
    Stdin  = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
    Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
    Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
)

Args содержат аргументы командной строки, начиная с имени программы.

var Args []string

ErrProcessDone указывает, что Process завершился.

var ErrProcessDone = errors.New("os: process already finished")

func Chdir

func Chdir(dir string) error

Chdir изменяет текущий рабочий каталог на указанный каталог. При возникновении ошибки она будет типа *PathError.

func Chmod

func Chmod(name string, mode FileMode) error

Chmod изменяет режим указанного файла на mode. Если файл является символической ссылкой, изменяет режим целевого объекта ссылки. При возникновении ошибки она будет типа *PathError.

Разный подмножество битов режима используется в зависимости от операционной системы.

В Unix используются биты разрешений режима, ModeSetuid, ModeSetgid и ModeSticky.

В Windows используется только бит 0o200 (запись владельцем) режима; он управляет тем, установлен или снят атрибут «только для чтения» файла. Другие биты в настоящее время не используются. Для совместимости с Go 1.12 и более ранними версиями используйте ненулевой режим. Используйте режим 0o400 для файла только для чтения и 0o600 для файла, который можно читать и записывать.

В Plan 9 используются биты разрешений режима, ModeAppend, ModeExclusive и ModeTemporary.

Пример

Код:

if err := os.Chmod("some-filename", 0644); err != nil {
    log.Fatal(err)
}

func Chown

func Chown(name string, uid, gid int) error

Chown изменяет числовые uid и gid указанного файла. Если файл является символической ссылкой, изменяет uid и gid целевого объекта ссылки. Значение uid или gid -1 означает, что это значение не должно изменяться. При возникновении ошибки она будет типа *PathError.

В Windows или Plan 9 Chown всегда возвращает ошибку syscall.EWINDOWS или EPLAN9, заключённую в *PathError.

func Chtimes

func Chtimes(name string, atime time.Time, mtime time.Time) error

Chtimes изменяет время доступа и изменения указанного файла, аналогично функциям Unix utime() или utimes(). Значение zero time.Time оставит соответствующее время файла неизменным.

Подлежащая файловая система может усекать или округлять значения до менее точного временного интервала. При возникновении ошибки она будет типа *PathError.

Пример

Код:

mtime := time.Date(2006, time.February, 1, 3, 4, 5, 0, time.UTC)
atime := time.Date(2007, time.March, 2, 4, 5, 6, 0, time.UTC)
if err := os.Chtimes("some-filename", atime, mtime); err != nil {
    log.Fatal(err)
}

func Clearenv

func Clearenv()

Clearenv удаляет все переменные окружения.

func CopyFS 1.23

func CopyFS(dir string, fsys fs.FS) error

CopyFS копирует файловую систему fsys в каталог dir, создавая dir при необходимости.

Файлы создаются с режимом 0o666 плюс любые разрешения на выполнение из источника, а каталоги создаются с режимом 0o777 (до применения umask).

CopyFS не будет перезаписывать существующие файлы. Если имя файла в fsys уже существует в пункте назначения, CopyFS вернёт ошибку, такую, что errors.Is(err, fs.ErrExist) будет истинным.

Символические ссылки в fsys не поддерживаются. При копировании из символической ссылки возвращается *PathError с Err, равным ErrInvalid.

Символические ссылки в dir отслеживаются.

Новые файлы, добавленные в fsys (включая случай, если dir является подкаталогом fsys) во время выполнения CopyFS, не гарантированно будут скопированы.

Копирование останавливается и возвращает первую встреченную ошибку.

func DirFS 1.16

func DirFS(dir string) fs.FS

DirFS возвращает файловую систему (fs.FS) для дерева файлов, укоренённого в каталоге dir.

Обратите внимание, что DirFS("/prefix") гарантирует только то, что вызовы Open, которые она делает для операционной системы, будут начинаться с "/prefix": DirFS("/prefix").Open("file") эквивалентно os.Open("/prefix/file"). Таким образом, если /prefix/file — это символическая ссылка, указывающая вне дерева /prefix, то использование DirFS не останавливает доступ ни сильнее, чем использование os.Open. Кроме того, корень возвращённой fs.FS для относительного пути, DirFS("prefix"), будет затронут последующими вызовами Chdir. Поэтому DirFS не является общим заменителем механизма безопасности в стиле chroot, когда древовидное каталогов содержит произвольное содержимое.

Используйте Root.FS, чтобы получить fs.FS, который предотвращает выход за пределы дерева через символические ссылки.

Каталог dir не должен быть пустым.

Результат реализует io/fs.StatFS, io/fs.ReadFileFS и io/fs.ReadDirFS.

func Environ

func Environ() []string

Environ возвращает копию строк, представляющих среду, в формате «ключ=значение».

func Executable 1.8

func Executable() (string, error)

Executable возвращает имя пути к исполняемому файлу, который запустил текущий процесс. Нет гарантии, что путь по-прежнему указывает на правильный исполняемый файл. Если процесс был запущен с помощью символической ссылки, в зависимости от операционной системы результат может быть символической ссылкой или путём, на который она указывает. Если требуется стабильный результат, path/filepath.EvalSymlinks может помочь.

Executable возвращает абсолютный путь, если не произошла ошибка.

Основной случай использования — нахождение ресурсов, расположенных относительно исполняемого файла.

func Exit

func Exit(code int)

Exit приводит к завершению текущей программы с заданным кодом состояния. Как правило, код 0 указывает на успех, ненулевой — на ошибку. Программа завершается немедленно; отложенные функции не выполняются.

Для обеспечения переносимости код состояния должен находиться в диапазоне [0, 125].

func Expand

func Expand(s string, mapping func(string) string) string

Expand заменяет ${var} или $var в строке на основе функции сопоставления. Например, os.ExpandEnv(s) эквивалентно os.Expand(s, os.Getenv).

Пример

Код:

mapper := func(placeholderName string) string {
    switch placeholderName {
    case "DAY_PART":
        return "morning"
    case "NAME":
        return "Gopher"
    }

    return ""
}

fmt.Println(os.Expand("Good ${DAY_PART}, $NAME!", mapper))

Вывод:

Good morning, Gopher!

func ExpandEnv

func ExpandEnv(s string) string

ExpandEnv заменяет ${var} или $var в строке в соответствии со значениями текущих переменных среды. Ссылки на неопределённые переменные заменяются пустой строкой.

Пример

Код:

os.Setenv("NAME", "gopher")
os.Setenv("BURROW", "/usr/gopher")

fmt.Println(os.ExpandEnv("$NAME lives in ${BURROW}."))

Вывод:

gopher lives in /usr/gopher.

func Getegid

func Getegid() int

Getegid возвращает числовой эффективный идентификатор группы вызывающего.

В Windows возвращает -1.

func Getenv

func Getenv(key string) string

Getenv извлекает значение переменной окружения, заданной ключом. Возвращает значение, которое будет пустым, если переменная отсутствует. Чтобы отличить пустое значение от не установленного, используйте LookupEnv.

Пример

Код:

os.Setenv("NAME", "gopher")
os.Setenv("BURROW", "/usr/gopher")

fmt.Printf("%s lives in %s.\n", os.Getenv("NAME"), os.Getenv("BURROW"))

Вывод:

gopher lives in /usr/gopher.

func Geteuid

func Geteuid() int

Geteuid возвращает числовой эффективный идентификатор пользователя вызывающего.

В Windows возвращает -1.

func Getgid

func Getgid() int

Getgid возвращает числовой идентификатор группы вызывающего.

В Windows возвращает -1.

func Getgroups

func Getgroups() ([]int, error)

Getgroups возвращает список числовых идентификаторов групп, к которым принадлежит вызывающий процесс.

В Windows он возвращает syscall.EWINDOWS. Обратитесь к пакету os/user для возможной альтернативы.

func Getpagesize

func Getpagesize() int

Getpagesize возвращает размер страницы памяти для используемой системы.

func Getpid

func Getpid() int

Getpid возвращает идентификатор процесса вызывающего процесса.

func Getppid

func Getppid() int

Getppid возвращает идентификатор процесса родительского процесса вызывающего процесса.

func Getuid

func Getuid() int

Getuid возвращает числовой идентификатор пользователя вызывающего процесса.

В Windows он возвращает -1.

func Getwd

func Getwd() (dir string, err error)

Getwd возвращает абсолютный путь к текущей директории. Если текущая директория может быть достигнута через несколько путей (из-за символических ссылок), Getwd может вернуть любой из них.

На платформах Unix, если переменная окружения PWD содержит абсолютный путь и является путем к текущей директории, она возвращается.

func Hostname

func Hostname() (name string, err error)

Hostname возвращает имя хоста, указанное ядром.

func IsExist

func IsExist(err error) bool

IsExist возвращает булево значение, указывающее, известно ли, что переданный аргумент сообщает о том, что файл или директория уже существуют. Он удовлетворяется значением ErrExist, а также некоторыми системными ошибками.

Эта функция предшествовала errors.Is. Она поддерживает только ошибки, возвращаемые пакетом os. Новый код должен использовать errors.Is(err, fs.ErrExist).

func IsNotExist

func IsNotExist(err error) bool

IsNotExist возвращает булево значение, указывающее, известно ли, что переданный аргумент сообщает о том, что файл или директория не существуют. Он удовлетворяется значением ErrNotExist, а также некоторыми системными ошибками.

Эта функция предшествовала errors.Is. Она поддерживает только ошибки, возвращаемые пакетом os. Новый код должен использовать errors.Is(err, fs.ErrNotExist).

func IsPathSeparator

func IsPathSeparator(c uint8) bool

IsPathSeparator проверяет, является ли символ c разделителем директорий.

func IsPermission

func IsPermission(err error) bool

IsPermission возвращает булево значение, указывающее, известно ли, что переданный аргумент сообщает о том, что доступ запрещён. Он удовлетворяется значением ErrPermission, а также некоторыми системными ошибками.

Эта функция предшествовала errors.Is. Она поддерживает только ошибки, возвращаемые пакетом os. Новый код должен использовать errors.Is(err, fs.ErrPermission).

func IsTimeout 1.10

func IsTimeout(err error) bool

IsTimeout возвращает булево значение, указывающее, известно ли, что переданный аргумент сообщает о том, что произошёл таймаут.

Эта функция предшествовала errors.Is, и понятие о том, указывает ли ошибка на таймаут, может быть неоднозначным. Например, системная ошибка Unix EWOULDBLOCK иногда указывает на таймаут, а иногда нет. Новый код должен использовать errors.Is со значением, соответствующим вызову, возвращающему ошибку, например, os.ErrDeadlineExceeded.

func Lchown

func Lchown(name string, uid, gid int) error

Lchown изменяет числовые uid и gid указанного файла. Если файл является символической ссылкой, изменяются uid и gid самой ссылки. При ошибке возвращается ошибка типа *PathError.

В Windows всегда возвращается ошибка syscall.EWINDOWS, обернутая в *PathError.

func Link

func Link(oldname, newname string) error

Link создаёт новый файл newname как жёсткую ссылку на файл oldname. При ошибке возвращается ошибка типа *LinkError.

func LookupEnv 1.5

func LookupEnv(key string) (string, bool)

LookupEnv извлекает значение переменной окружения, имя которой задано в ключе. Если переменная присутствует в окружении, возвращается её значение (которое может быть пустым) и булево значение true. В противном случае возвращаемое значение будет пустым, а булево значение — false.

Пример

Код:

show := func(key string) {
    val, ok := os.LookupEnv(key)
    if !ok {
        fmt.Printf("%s not set\n", key)
    } else {
        fmt.Printf("%s=%s\n", key, val)
    }
}

os.Setenv("SOME_KEY", "value")
os.Setenv("EMPTY_KEY", "")

show("SOME_KEY")
show("EMPTY_KEY")
show("MISSING_KEY")

Вывод:

SOME_KEY=value
EMPTY_KEY=
MISSING_KEY not set

func Mkdir

func Mkdir(name string, perm FileMode) error

Mkdir создаёт новую директорию с заданным именем и битами прав (до применения umask). При ошибке возвращается ошибка типа *PathError.

Пример

Код:

err := os.Mkdir("testdir", 0750)
if err != nil && !os.IsExist(err) {
    log.Fatal(err)
}
err = os.WriteFile("testdir/testfile.txt", []byte("Hello, Gophers!"), 0660)
if err != nil {
    log.Fatal(err)
}

func MkdirAll

func MkdirAll(path string, perm FileMode) error

MkdirAll создаёт директорию с именем path, а также все необходимые родительские директории и возвращает nil, или же возвращает ошибку. Бит прав perm (до применения umask) используются для всех директорий, которые MkdirAll создаёт. Если path уже является директорией, MkdirAll ничего не делает и возвращает nil.

Пример

Код:

err := os.MkdirAll("test/subdir", 0750)
if err != nil {
    log.Fatal(err)
}
err = os.WriteFile("test/subdir/testfile.txt", []byte("Hello, Gophers!"), 0660)
if err != nil {
    log.Fatal(err)
}

func MkdirTemp 1.16

func MkdirTemp(dir, pattern string) (string, error)

MkdirTemp создаёт новую временную директорию в директории dir и возвращает путь к новой директории. Имя новой директории генерируется путём добавления случайной строки в конец pattern. Если pattern содержит «*», случайная строка заменяет последний «*» вместо этого. Директория создаётся с правами 0o700 (до применения umask). Если dir пустая строка, MkdirTemp использует стандартную директорию для временных файлов, как возвращает TempDir. Несколько программ или горутин, одновременно вызывающих MkdirTemp, не выберут одну и ту же директорию. Ответственность за удаление директории, когда она больше не нужна, лежит на вызывающей стороне.

Пример

Код:

dir, err := os.MkdirTemp("", "example")
if err != nil {
    log.Fatal(err)
}
defer os.RemoveAll(dir) // clean up

file := filepath.Join(dir, "tmpfile")
if err := os.WriteFile(file, []byte("content"), 0666); err != nil {
    log.Fatal(err)
}

Пример (Суффикс)

Код:

logsDir, err := os.MkdirTemp("", "*-logs")
if err != nil {
    log.Fatal(err)
}
defer os.RemoveAll(logsDir) // clean up

// Logs can be cleaned out earlier if needed by searching
// for all directories whose suffix ends in *-logs.
globPattern := filepath.Join(os.TempDir(), "*-logs")
matches, err := filepath.Glob(globPattern)
if err != nil {
    log.Fatalf("Failed to match %q: %v", globPattern, err)
}

for _, match := range matches {
    if err := os.RemoveAll(match); err != nil {
        log.Printf("Failed to remove %q: %v", match, err)
    }
}

func NewSyscallError

func NewSyscallError(syscall string, err error) error

NewSyscallError возвращает, как ошибку, новый SyscallError с заданным именем системного вызова и деталями ошибки. Для удобства, если err равно nil, NewSyscallError возвращает nil.

func Pipe

func Pipe() (r *File, w *File, err error)

Pipe возвращает соединённую пару файлов; чтения из r возвращают байты, написанные в w. Он возвращает файлы и ошибку, если она возникла.

func ReadFile 1.16

func ReadFile(name string) ([]byte, error)

ReadFile считывает указанный файл и возвращает содержимое. Успешный вызов возвращает err == nil, а не err == EOF. Поскольку ReadFile считывает весь файл, он не обрабатывает EOF из Read как ошибку, которую нужно сообщить.

Пример

Код:

data, err := os.ReadFile("testdata/hello")
if err != nil {
    log.Fatal(err)
}
os.Stdout.Write(data)

Вывод:

Hello, Gophers!

func Readlink

func Readlink(name string) (string, error)

Readlink возвращает назначение указанной символической ссылки. При ошибке возвращается ошибка типа *PathError.

Если назначение ссылки является относительным, Readlink возвращает относительный путь без его преобразования в абсолютный.

Пример

Код:

// First, we create a relative symlink to a file.
d, err := os.MkdirTemp("", "")
if err != nil {
    log.Fatal(err)
}
defer os.RemoveAll(d)
targetPath := filepath.Join(d, "hello.txt")
if err := os.WriteFile(targetPath, []byte("Hello, Gophers!"), 0644); err != nil {
    log.Fatal(err)
}
linkPath := filepath.Join(d, "hello.link")
if err := os.Symlink("hello.txt", filepath.Join(d, "hello.link")); err != nil {
    if errors.Is(err, errors.ErrUnsupported) {
        // Allow the example to run on platforms that do not support symbolic links.
        fmt.Printf("%s links to %s\n", filepath.Base(linkPath), "hello.txt")
        return
    }
    log.Fatal(err)
}

// Readlink returns the relative path as passed to os.Symlink.
dst, err := os.Readlink(linkPath)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%s links to %s\n", filepath.Base(linkPath), dst)

var dstAbs string
if filepath.IsAbs(dst) {
    dstAbs = dst
} else {
    // Symlink targets are relative to the directory containing the link.
    dstAbs = filepath.Join(filepath.Dir(linkPath), dst)
}

// Check that the target is correct by comparing it with os.Stat
// on the original target path.
dstInfo, err := os.Stat(dstAbs)
if err != nil {
    log.Fatal(err)
}
targetInfo, err := os.Stat(targetPath)
if err != nil {
    log.Fatal(err)
}
if !os.SameFile(dstInfo, targetInfo) {
    log.Fatalf("link destination (%s) is not the same file as %s", dstAbs, targetPath)
}

Вывод:

hello.link links to hello.txt

func Remove

func Remove(name string) error

Remove удаляет указанный файл или (пустую) директорию. При ошибке возвращается ошибка типа *PathError.

func RemoveAll

func RemoveAll(path string) error

RemoveAll удаляет путь и все содержащиеся в нём дочерние элементы. Он удаляет всё, что может, но возвращает первую встреченную ошибку. Если путь не существует, RemoveAll возвращает nil (без ошибки). При ошибке возвращается ошибка типа *PathError.

func Rename

func Rename(oldpath, newpath string) error

Rename переименовывает (перемещает) oldpath в newpath. Если newpath уже существует и не является директорией, Rename заменяет его. Если newpath уже существует и является директорией, Rename возвращает ошибку. Могут применяться специфические для ОС ограничения, когда oldpath и newpath находятся в разных директориях. Даже в пределах одной директории, на платформах, не являющихся Unix, Rename не является атомарной операцией. При ошибке возвращается ошибка типа *LinkError.

func SameFile

func SameFile(fi1, fi2 FileInfo) bool

SameFile проверяет, описывают ли fi1 и fi2 один и тот же файл. Например, в Unix это означает, что поля device и inode двух базовых структур идентичны; на других системах решение может основываться на именах путей. SameFile применяется только к результатам, возвращаемым функцией Stat этого пакета. В других случаях возвращает false.

func Setenv

func Setenv(key, value string) error

Setenv устанавливает значение переменной окружения, имя которой задано в ключе. Возвращает ошибку, если она произошла.

func Symlink

func Symlink(oldname, newname string) error

Symlink создаёт newname как символическую ссылку на oldname. В Windows, символическая ссылка на несуществующий oldname создаёт файловую символическую ссылку; если oldname позже создаётся как директория, символическая ссылка не будет работать. При ошибке возвращается ошибка типа *LinkError.

func TempDir

func TempDir() string

TempDir возвращает стандартную директорию для использования временных файлов.

В системах Unix, он возвращает $TMPDIR, если он не пустой, иначе /tmp. В Windows, он использует GetTempPath, возвращая первое непустое значение из %TMP%, %TEMP%, %USERPROFILE% или директории Windows. В Plan 9, он возвращает /tmp.

Директория не гарантируется ни в существовании, ни в наличии разрешений доступа.

func Truncate

func Truncate(name string, size int64) error

Truncate изменяет размер указанного файла. Если файл является символической ссылкой, изменяется размер целевого файла ссылки. При ошибке возвращается ошибка типа *PathError.

func Unsetenv 1.4

func Unsetenv(key string) error

Unsetenv удаляет переменную окружения.

Пример

Код:

os.Setenv("TMPDIR", "/my/tmp")
defer os.Unsetenv("TMPDIR")

func UserCacheDir 1.11

func UserCacheDir() (string, error)

UserCacheDir возвращает корневую директорию по умолчанию для использования пользовательских данных кеша. Пользователи должны создавать свои собственные поддиректории, специфичные для приложения, внутри неё и использовать их.

В Unix системах, он возвращает $XDG_CACHE_HOME, как указано в https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html, если он не пустой, иначе $HOME/.cache. В Darwin, он возвращает $HOME/Library/Caches. В Windows, он возвращает %LocalAppData%. В Plan 9, он возвращает $home/lib/cache.

Если расположение не может быть определено (например, $HOME не определён) или путь в $XDG_CACHE_HOME является относительным, то возвращается ошибка.

Пример

Код:

dir, dirErr := os.UserCacheDir()
if dirErr == nil {
    dir = filepath.Join(dir, "ExampleUserCacheDir")
}

getCache := func(name string) ([]byte, error) {
    if dirErr != nil {
        return nil, &os.PathError{Op: "getCache", Path: name, Err: os.ErrNotExist}
    }
    return os.ReadFile(filepath.Join(dir, name))
}

var mkdirOnce sync.Once
putCache := func(name string, b []byte) error {
    if dirErr != nil {
        return &os.PathError{Op: "putCache", Path: name, Err: dirErr}
    }
    mkdirOnce.Do(func() {
        if err := os.MkdirAll(dir, 0700); err != nil {
            log.Printf("can't create user cache dir: %v", err)
        }
    })
    return os.WriteFile(filepath.Join(dir, name), b, 0600)
}

// Read and store cached data.
// …
_ = getCache
_ = putCache

func UserConfigDir 1.13

func UserConfigDir() (string, error)

UserConfigDir возвращает стандартный корневой каталог для использования пользовательских данных конфигурации. Пользователи должны создавать собственные подкаталоги, специфичные для приложения, внутри этого каталога и использовать их.

В системах Unix, он возвращает $XDG_CONFIG_HOME, если он не пустой, согласно https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html, иначе $HOME/.config. В Darwin он возвращает $HOME/Library/Application Support. В Windows он возвращает %AppData%. В Plan 9 он возвращает $home/lib.

Если расположение не может быть определено (например, $HOME не определён) или путь в $XDG_CONFIG_HOME является относительным, то будет возвращено сообщение об ошибке.

Пример

Код:

dir, dirErr := os.UserConfigDir()

var (
    configPath string
    origConfig []byte
)
if dirErr == nil {
    configPath = filepath.Join(dir, "ExampleUserConfigDir", "example.conf")
    var err error
    origConfig, err = os.ReadFile(configPath)
    if err != nil && !os.IsNotExist(err) {
        // The user has a config file but we couldn't read it.
        // Report the error instead of ignoring their configuration.
        log.Fatal(err)
    }
}

// Use and perhaps make changes to the config.
config := bytes.Clone(origConfig)
// …

// Save changes.
if !bytes.Equal(config, origConfig) {
    if configPath == "" {
        log.Printf("not saving config changes: %v", dirErr)
    } else {
        err := os.MkdirAll(filepath.Dir(configPath), 0700)
        if err == nil {
            err = os.WriteFile(configPath, config, 0600)
        }
        if err != nil {
            log.Printf("error saving config changes: %v", err)
        }
    }
}

func UserHomeDir 1.12

func UserHomeDir() (string, error)

UserHomeDir возвращает домашний каталог текущего пользователя.

В Unix, включая macOS, он возвращает переменную окружения $HOME. В Windows он возвращает %USERPROFILE%. В Plan 9 он возвращает переменную окружения $home.

Если указанная переменная не установлена в среде, UserHomeDir возвращает либо платформоспецифическое значение по умолчанию, либо ненулевую ошибку.

func WriteFile 1.16

func WriteFile(name string, data []byte, perm FileMode) error

WriteFile записывает данные в указанный файл, создавая его при необходимости. Если файл не существует, WriteFile создаёт его с правами perm (до применения umask); в противном случае WriteFile обнуляет его перед записью, без изменения прав. Поскольку WriteFile требует нескольких системных вызовов для завершения, ошибка в середине операции может оставить файл в частично записанном состоянии.

Пример

Код:

err := os.WriteFile("testdata/hello", []byte("Hello, Gophers!"), 0666)
if err != nil {
    log.Fatal(err)
}

type DirEntry 1.16

DirEntry — это запись, прочитанная из каталога (с помощью функции ReadDir или метода File.ReadDir).

type DirEntry = fs.DirEntry

func ReadDir 1.16

func ReadDir(name string) ([]DirEntry, error)

ReadDir читает указанный каталог, возвращая все его записи каталога, отсортированные по имени файла. Если при чтении каталога возникает ошибка, ReadDir возвращает записи, которые удалось прочитать до ошибки, вместе с ошибкой.

Пример

Код:

files, err := os.ReadDir(".")
if err != nil {
    log.Fatal(err)
}

for _, file := range files {
    fmt.Println(file.Name())
}

type File

File представляет открытый дескриптор файла.

Методы File безопасны для одновременного использования.

type File struct {
    // contains filtered or unexported fields
}

func Create

func Create(name string) (*File, error)

Create создаёт или обнуляет указанный файл. Если файл уже существует, он обнуляется. Если файл не существует, он создаётся с режимом 0o666 (до применения umask). При успешном выполнении методы возвращаемого File могут быть использованы для ввода-вывода; связанный дескриптор файла имеет режим O_RDWR. Каталог, содержащий файл, должен уже существовать. Если произошла ошибка, она будет типа *PathError.

func CreateTemp 1.16

func CreateTemp(dir, pattern string) (*File, error)

CreateTemp создаёт новый временный файл в каталоге dir, открывает файл для чтения и записи и возвращает получившийся файл. Имя файла генерируется путём взятия pattern и добавления случайной строки в конец. Если pattern включает "*", случайная строка заменяет последний "*". Файл создаётся с режимом 0o600 (до применения umask). Если dir пустая строка, CreateTemp использует стандартный каталог для временных файлов, возвращаемый TempDir. Несколько программ или горутин, одновременно вызывающие CreateTemp, не выберут один и тот же файл. Вызывающий метод может использовать метод Name файла для поиска пути файла. Вызывающая сторона отвечает за удаление файла, когда он больше не нужен.

Пример

Код:

f, err := os.CreateTemp("", "example")
if err != nil {
    log.Fatal(err)
}
defer os.Remove(f.Name()) // clean up

if _, err := f.Write([]byte("content")); err != nil {
    log.Fatal(err)
}
if err := f.Close(); err != nil {
    log.Fatal(err)
}

Пример (Суффикс)

Код:

f, err := os.CreateTemp("", "example.*.txt")
if err != nil {
    log.Fatal(err)
}
defer os.Remove(f.Name()) // clean up

if _, err := f.Write([]byte("content")); err != nil {
    f.Close()
    log.Fatal(err)
}
if err := f.Close(); err != nil {
    log.Fatal(err)
}

func NewFile

func NewFile(fd uintptr, name string) *File

NewFile возвращает новый File с заданным дескриптором файла и именем. Возвращаемое значение будет null, если fd не является допустимым дескриптором файла. В системах Unix, если дескриптор файла находится в режиме без ожидания, NewFile попытается вернуть поддерживающий обработку File (для которого работают методы SetDeadline).

После передачи его в NewFile, fd может стать недопустимым в тех же условиях, что описаны в комментариях к методу Fd, и те же ограничения применяются.

func Open

func Open(name string) (*File, error)

Open открывает указанный файл для чтения. При успешном выполнении методы возвращаемого файла могут использоваться для чтения; связанный дескриптор файла имеет режим O_RDONLY. Если произошла ошибка, она будет типа *PathError.

func OpenFile

func OpenFile(name string, flag int, perm FileMode) (*File, error)

OpenFile — обобщённый вызов открытия; большинство пользователей будут использовать Open или Create вместо него. Он открывает указанный файл со специфицированным флагом (O_RDONLY и т.д.). Если файл не существует, и флаг O_CREATE передан, он создаётся с режимом perm (до применения umask); содержащий каталог должен существовать. При успешном выполнении методы возвращаемого File могут быть использованы для ввода-вывода. Если произошла ошибка, она будет типа *PathError.

Пример

Код:

f, err := os.OpenFile("notes.txt", os.O_RDWR|os.O_CREATE, 0644)
if err != nil {
    log.Fatal(err)
}
if err := f.Close(); err != nil {
    log.Fatal(err)
}

Пример (Добавление)

Код:

// If the file doesn't exist, create it, or append to the file
f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
    log.Fatal(err)
}
if _, err := f.Write([]byte("appended some data\n")); err != nil {
    f.Close() // ignore error; Write error takes precedence
    log.Fatal(err)
}
if err := f.Close(); err != nil {
    log.Fatal(err)
}

func OpenInRoot 1.24

func OpenInRoot(dir, name string) (*File, error)

OpenInRoot открывает файл name в каталоге dir. Он эквивалентен OpenRoot(dir), за которым следует открытие файла в корне.

OpenInRoot возвращает ошибку, если какая-либо часть имени ссылается на расположение за пределами dir.

См. Root для получения подробностей и ограничений.

func (*File) Chdir

func (f *File) Chdir() error

Chdir изменяет текущий рабочий каталог на файл, который должен быть каталогом. Если произошла ошибка, она будет типа *PathError.

func (*File) Chmod

func (f *File) Chmod(mode FileMode) error

Chmod изменяет режим файла на mode. Если произошла ошибка, она будет типа *PathError.

func (*File) Chown

func (f *File) Chown(uid, gid int) error

Chown изменяет числовой uid и gid указанного файла. Если произошла ошибка, она будет типа *PathError.

В Windows он всегда возвращает ошибку syscall.EWINDOWS, обернутую в *PathError.

func (*File) Close

func (f *File) Close() error

Close закрывает File, делая его непригодным для ввода-вывода. В файлах, которые поддерживают File.SetDeadline, любые ожидающие операции ввода-вывода будут отменены и немедленно возвращены с ошибкой ErrClosed. Close вернёт ошибку, если уже был вызван.

func (*File) Fd

func (f *File) Fd() uintptr

Fd возвращает целое число Unix дескриптора файла, ссылающегося на открытый файл. Если f закрыт, дескриптор файла становится недопустимым. Если f собирается по мусору, финализатор может закрыть дескриптор файла, сделав его недопустимым; см. runtime.SetFinalizer для получения дополнительной информации о том, когда может выполняться финализатор. В системах Unix это приведёт к тому, что методы File.SetDeadline перестанут работать. Поскольку дескрипторы файлов могут быть повторно использованы, возвращаемый дескриптор файла может быть закрыт только с помощью метода File.Close объекта f или его финализатором во время сбора мусора. В противном случае, во время сбора мусора финализатор может закрыть несвязанный дескриптор файла с тем же (переиспользованным) номером.

В качестве альтернативы, посмотрите метод f.SyscallConn.

func (*File) Name

func (f *File) Name() string

Name возвращает имя файла, представленное в Open.

Безопасно вызывать Name после [Close].

func (*File) Read

func (f *File) Read(b []byte) (n int, err error)

Read считывает до len(b) байтов из File и сохраняет их в b. Возвращает количество считанных байтов и любую возникшую ошибку. В конце файла Read возвращает 0, io.EOF.

func (*File) ReadAt

func (f *File) ReadAt(b []byte, off int64) (n int, err error)

ReadAt считывает len(b) байтов из File, начиная с байтового смещения off. Возвращает количество считанных байтов и ошибку, если она есть. ReadAt всегда возвращает ненулевую ошибку, когда n < len(b). В конце файла эта ошибка — io.EOF.

func (*File) ReadDir 1.16

func (f *File) ReadDir(n int) ([]DirEntry, error)

ReadDir считывает содержимое каталога, связанного с файлом f, и возвращает срез значений DirEntry в порядке каталога. Последующие вызовы для того же файла вернут последующие записи DirEntry в каталоге.

Если n > 0, ReadDir возвращает не более n записей DirEntry. В этом случае, если ReadDir возвращает пустой срез, он вернёт ошибку, объясняющую причину. В конце каталога ошибка — io.EOF.

Если n <= 0, ReadDir возвращает все записи DirEntry, оставшиеся в каталоге. При успехе он возвращает нулевую ошибку (не io.EOF).

func (*File) ReadFrom 1.15

func (f *File) ReadFrom(r io.Reader) (n int64, err error)

ReadFrom реализует io.ReaderFrom.

func (*File) Readdir

func (f *File) Readdir(n int) ([]FileInfo, error)

Readdir считывает содержимое каталога, связанного с файлом, и возвращает срез до n значений FileInfo, как это возвращалось бы Lstat, в порядке каталога. Последующие вызовы для того же файла вернут последующие значения FileInfo.

Если n > 0, Readdir возвращает не более n структур FileInfo. В этом случае, если Readdir возвращает пустой срез, он вернёт ненулевую ошибку, объясняющую причину. В конце каталога ошибка — io.EOF.

Если n <= 0, Readdir возвращает все FileInfo из каталога в одном срезе. В этом случае, если Readdir успешно выполняется (читает до конца каталога), он возвращает срез и нулевую ошибку. Если он сталкивается с ошибкой до конца каталога, Readdir возвращает прочитанные FileInfo до этой точки и ненулевую ошибку.

Большинству клиентов лучше подходит более эффективный метод ReadDir.

func (*File) Readdirnames

func (f *File) Readdirnames(n int) (names []string, err error)

Readdirnames считывает содержимое каталога, связанного с файлом, и возвращает срез до n имён файлов в каталоге, в порядке каталога. Последующие вызовы для того же файла вернут последующие имена.

Если n > 0, Readdirnames возвращает не более n имён. В этом случае, если Readdirnames возвращает пустой срез, он вернёт ненулевую ошибку, объясняющую причину. В конце каталога ошибка — io.EOF.

Если n <= 0, Readdirnames возвращает все имена из каталога в одном срезе. В этом случае, если Readdirnames успешно выполняется (считывает до конца каталога), оно возвращает срез и nil ошибку. Если перед концом каталога возникает ошибка, Readdirnames возвращает имена, прочитанные до этого момента, и не-nil ошибку.

func (*File) Seek

func (f *File) Seek(offset int64, whence int) (ret int64, err error)

Seek устанавливает смещение для следующего чтения или записи в файл на смещение, интерпретируемое в соответствии с whence: 0 означает относительно начала файла, 1 — относительно текущего смещения, а 2 — относительно конца. Оно возвращает новое смещение и ошибку, если таковая имеется. Поведение Seek для файла, открытого с O_APPEND, не определено.

func (*File) SetDeadline 1.10

func (f *File) SetDeadline(t time.Time) error

SetDeadline устанавливает временные рамки для чтения и записи для файла. Это эквивалентно вызову SetReadDeadline и SetWriteDeadline.

Только некоторые типы файлов поддерживают установку временных рамок. Вызовы SetDeadline для файлов, которые не поддерживают временные рамки, вернут ErrNoDeadline. На большинстве систем обычные файлы не поддерживают временные рамки, но трубы поддерживают.

Временная рамка — это абсолютное время, после которого операции ввода-вывода завершаются ошибкой вместо ожидания. Временная рамка применяется ко всем будущим и ожидающим операциям ввода-вывода, а не только к последующему вызову Read или Write. После превышения временной рамки подключение можно обновить, установив временную рамку в будущем.

Если временная рамка превышена, вызов Read или Write или других методов ввода-вывода вернут ошибку, содержащую ErrDeadlineExceeded. Это можно проверить с помощью errors.Is(err, os.ErrDeadlineExceeded). Эта ошибка реализует метод Timeout, и вызов метода Timeout вернёт true, но существуют и другие возможные ошибки, для которых Timeout вернёт true, даже если временная рамка не была превышена.

Таймаут ожидания можно реализовать, многократно продлевая временную рамку после успешных вызовов Read или Write.

Ноль для t означает, что операции ввода-вывода не будут ограничены по времени.

func (*File) SetReadDeadline 1.10

func (f *File) SetReadDeadline(t time.Time) error

SetReadDeadline устанавливает временную рамку для будущих вызовов Read и любых вызовов Read, которые в настоящее время заблокированы. Нулевое значение для t означает, что чтение не будет ограничено по времени. Не все файлы поддерживают установку временных рамок; см. SetDeadline.

func (*File) SetWriteDeadline 1.10

func (f *File) SetWriteDeadline(t time.Time) error

SetWriteDeadline устанавливает временную рамку для любых будущих вызовов Write и любых вызовов Write, которые в настоящее время заблокированы. Даже если Write превысит временную рамку, он может вернуть n > 0, что указывает на то, что часть данных была успешно записана. Ноль для t означает, что запись не будет ограничена по времени. Не все файлы поддерживают установку временных рамок; см. SetDeadline.

func (*File) Stat

func (f *File) Stat() (FileInfo, error)

Stat возвращает структуру FileInfo, описывающую файл. Если возникла ошибка, она будет типа *PathError.

func (*File) Sync

func (f *File) Sync() error

Sync фиксирует текущее содержимое файла в стабильное хранилище. Обычно это означает сохранение кэшированных данных в памяти файловой системы на диск.

func (*File) SyscallConn 1.12

func (f *File) SyscallConn() (syscall.RawConn, error)

SyscallConn возвращает сырой файл. Это реализует интерфейс syscall.Conn.

func (*File) Truncate

func (f *File) Truncate(size int64) error

Truncate изменяет размер файла. Оно не изменяет смещение ввода-вывода. Если возникла ошибка, она будет типа *PathError.

func (*File) Write

func (f *File) Write(b []byte) (n int, err error)

Write записывает len(b) байт из b в файл. Возвращает количество записанных байтов и ошибку, если таковая имеется. Write возвращает не-nil ошибку, когда n != len(b).

func (*File) WriteAt

func (f *File) WriteAt(b []byte, off int64) (n int, err error)

WriteAt записывает len(b) байт в файл, начиная с байтового смещения off. Возвращает количество записанных байтов и ошибку, если таковая имеется. WriteAt возвращает не-nil ошибку, когда n != len(b).

Если файл был открыт с флагом O_APPEND, WriteAt возвращает ошибку.

func (*File) WriteString

func (f *File) WriteString(s string) (n int, err error)

WriteString подобно Write, но записывает содержимое строки s, а не срез байтов.

func (*File) WriteTo 1.22

func (f *File) WriteTo(w io.Writer) (n int64, err error)

WriteTo реализует io.WriterTo.

type FileInfo

FileInfo описывает файл и возвращается Stat и Lstat.

type FileInfo = fs.FileInfo

func Lstat

func Lstat(name string) (FileInfo, error)

Lstat возвращает FileInfo, описывающую указанный файл. Если файл является символической ссылкой, возвращаемая FileInfo описывает символическую ссылку. Lstat не пытается следовать ссылке. Если возникла ошибка, она будет типа *PathError.

В Windows, если файл является точкой перенаправления, являющейся заменой для другого именованного объекта (например, символической ссылки или смонтированной папки), возвращаемая FileInfo описывает точку перенаправления и не пытается её разрешить.

func Stat

func Stat(name string) (FileInfo, error)

Stat возвращает FileInfo, описывающую указанный файл. Если возникла ошибка, она будет типа *PathError.

type FileMode

FileMode представляет режим и биты разрешений файла. Биты имеют одинаковое определение на всех системах, что позволяет перемещать информацию о файлах между системами. Не все биты применимы ко всем системам. Единственный обязательный бит — ModeDir для каталогов.

type FileMode = fs.FileMode

Пример

Код:

fi, err := os.Lstat("some-filename")
if err != nil {
    log.Fatal(err)
}

fmt.Printf("permissions: %#o\n", fi.Mode().Perm()) // 0o400, 0o777, etc.
switch mode := fi.Mode(); {
case mode.IsRegular():
    fmt.Println("regular file")
case mode.IsDir():
    fmt.Println("directory")
case mode&fs.ModeSymlink != 0:
    fmt.Println("symbolic link")
case mode&fs.ModeNamedPipe != 0:
    fmt.Println("named pipe")
}

type LinkError

LinkError записывает ошибку во время системного вызова ссылки, символической ссылки или переименования и пути, которые её вызвали.

type LinkError struct {
    Op  string
    Old string
    New string
    Err error
}

func (*LinkError) Error

func (e *LinkError) Error() string

func (*LinkError) Unwrap 1.13

func (e *LinkError) Unwrap() error

type PathError

PathError записывает ошибку, операцию и путь к файлу, которые её вызвали.

type PathError = fs.PathError

type ProcAttr

ProcAttr хранит атрибуты, которые будут применены к новому процессу, запущенному с помощью StartProcess.

type ProcAttr struct {
    // If Dir is non-empty, the child changes into the directory before
    // creating the process.
    Dir string
    // If Env is non-nil, it gives the environment variables for the
    // new process in the form returned by Environ.
    // If it is nil, the result of Environ will be used.
    Env []string
    // Files specifies the open files inherited by the new process. The
    // first three entries correspond to standard input, standard output, and
    // standard error. An implementation may support additional entries,
    // depending on the underlying operating system. A nil entry corresponds
    // to that file being closed when the process starts.
    // On Unix systems, StartProcess will change these File values
    // to blocking mode, which means that SetDeadline will stop working
    // and calling Close will not interrupt a Read or Write.
    Files []*File

    // Operating system-specific process creation attributes.
    // Note that setting this field means that your program
    // may not execute properly or even compile on some
    // operating systems.
    Sys *syscall.SysProcAttr
}

type Process

Process хранит информацию о процессе, созданном с помощью StartProcess.

type Process struct {
    Pid int
    // contains filtered or unexported fields
}

func FindProcess

func FindProcess(pid int) (*Process, error)

FindProcess ищет запущенный процесс по его pid.

Возвращаемый Process может использоваться для получения информации о процессе в базовой операционной системе.

В Unix-системах FindProcess всегда успешно возвращает Process для заданного pid, независимо от того, существует ли процесс. Чтобы проверить, существует ли процесс, проверьте, сообщает ли p.Signal(syscall.Signal(0)) об ошибке.

func StartProcess

func StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error)

StartProcess запускает новый процесс с программой, аргументами и атрибутами, указанными в name, argv и attr. Срез argv станет os.Args в новом процессе, поэтому он обычно начинается с имени программы.

Если вызывающая горутина заблокировала операционную систему поток с runtime.LockOSThread и изменила какие-либо наследуемые состояния потока операционной системы (например, пространства имён Linux или Plan 9), новый процесс унаследует состояние потока вызывающей горутины.

StartProcess — это низкоуровневый интерфейс. Пакет os/exec предоставляет более высокоуровневые интерфейсы.

Если возникла ошибка, она будет типа *PathError.

func (*Process) Kill

func (p *Process) Kill() error

Kill заставляет процесс Process выйти немедленно. Kill не ждёт, пока Process фактически выйдет. Это убивает только сам Process, а не любые другие процессы, которые он мог запустить.

func (*Process) Release

func (p *Process) Release() error

Release освобождает все ресурсы, связанные с процессом Process p, делая его непригодным для использования в будущем. Release нужно вызывать только в том случае, если Process.Wait не используется.

func (*Process) Signal

func (p *Process) Signal(sig Signal) error

Signal отправляет сигнал процессу Process. Отправка Interrupt в Windows не реализована.

func (*Process) Wait

func (p *Process) Wait() (*ProcessState, error)

Wait ждёт завершения процесса Process и возвращает ProcessState, описывающую его состояние и ошибку, если таковая имеется. Wait освобождает все ресурсы, связанные с процессом. В большинстве операционных систем процесс должен быть дочерним для текущего процесса, иначе будет возвращена ошибка.

type ProcessState

ProcessState хранит информацию о процессе, как сообщается методом Wait.

type ProcessState struct {
    // contains filtered or unexported fields
}

func (*ProcessState) ExitCode 1.12

func (p *ProcessState) ExitCode() int

ExitCode возвращает код завершения завершённого процесса или -1, если процесс не завершён или был завершён сигналом.

func (*ProcessState) Exited

func (p *ProcessState) Exited() bool

Exited сообщает, вышел ли процесс. В Unix-системах это true, если программа вышла из-за вызова exit, и false, если программа завершилась из-за сигнала.

func (*ProcessState) Pid

func (p *ProcessState) Pid() int

Pid возвращает идентификатор процесса завершённого процесса.

func (*ProcessState) String

func (p *ProcessState) String() string

func (*ProcessState) Success

func (p *ProcessState) Success() bool

Success сообщает, вышел ли процесс успешно, например, со статусом завершения 0 в Unix-системах.

func (*ProcessState) Sys

func (p *ProcessState) Sys() any

Sys возвращает информацию о завершении процесса, зависящую от системы. Преобразуйте её в соответствующий базовый тип, например, syscall.WaitStatus в Unix-системах, чтобы получить доступ к её содержимому.

func (*ProcessState) SysUsage

func (p *ProcessState) SysUsage() any

SysUsage возвращает информацию об использовании ресурсов завершённого процесса, зависящую от системы. Преобразуйте её в соответствующий базовый тип, например, *syscall.Rusage в Unix-системах, чтобы получить доступ к её содержимому. (В Unix, *syscall.Rusage соответствует структуре rusage, как определено в руководстве getrusage(2)).

func (*ProcessState) SystemTime

func (p *ProcessState) SystemTime() time.Duration

SystemTime возвращает системное время процессора завершенного процесса и его дочерних процессов.

func (*ProcessState) UserTime

func (p *ProcessState) UserTime() time.Duration

UserTime возвращает время процессора пользователя завершенного процесса и его дочерних процессов.

type Root 1.24

Root можно использовать для доступа только к файлам в рамках одного дерева каталогов.

Методы Root могут обращаться только к файлам и каталогам, находящимся под корневым каталогом. Если любой компонент имени файла, переданный методу Root, ссылается на местоположение вне корня, метод возвращает ошибку. Имена файлов могут ссылаться на сам каталог (.).

Методы Root будут следовать символическим ссылкам, но символические ссылки не могут ссылаться на местоположение вне корня. Символические ссылки не должны быть абсолютными.

Методы Root не запрещают перемещение по границам файловой системы, мостам привязки Linux, специальным файлам /proc или доступу к файлам устройств Unix.

Методы Root безопасно использовать из нескольких горутин одновременно.

На большинстве платформ создание Root открывает дескриптор файла или обработчик, ссылающийся на каталог. Если каталог перемещен, методы Root ссылаются на исходный каталог в его новом местоположении.

Поведение Root отличается на некоторых платформах:

  • Когда GOOS=windows, имена файлов не могут ссылаться на зарезервированные имена устройств Windows, такие как NUL и COM1.
  • Когда GOOS=js, Root уязвим к атакам TOCTOU (время проверки — время использования) при валидации символических ссылок и не может гарантировать, что операции не выйдут за пределы корня.
  • Когда GOOS=plan9 или GOOS=js, Root не отслеживает каталоги при переименовании. На этих платформах Root ссылается на имя каталога, а не на дескриптор файла.
type Root struct {
    // contains filtered or unexported fields
}

func OpenRoot 1.24

func OpenRoot(name string) (*Root, error)

OpenRoot открывает указанный каталог. При возникновении ошибки она будет типа *PathError.

func (*Root) Close 1.24

func (r *Root) Close() error

Close закрывает Root. После вызова Close методы Root возвращают ошибки.

func (*Root) Create 1.24

func (r *Root) Create(name string) (*File, error)

Create создает или обрезает указанный файл в корне. Подробнее см. Create.

func (*Root) FS 1.24

func (r *Root) FS() fs.FS

FS возвращает файловую систему (fs.FS) для дерева файлов в корне.

Результат реализует io/fs.StatFS, io/fs.ReadFileFS и io/fs.ReadDirFS.

func (*Root) Lstat 1.24

func (r *Root) Lstat(name string) (FileInfo, error)

Lstat возвращает FileInfo, описывающую указанный файл в корне. Если файл является символической ссылкой, возвращаемая FileInfo описывает символическую ссылку. Подробнее см. Lstat.

func (*Root) Mkdir 1.24

func (r *Root) Mkdir(name string, perm FileMode) error

Mkdir создает новый каталог в корне с указанным именем и разрешениями (до применения umask). Подробнее см. Mkdir.

Если perm содержит биты, отличные от девяти младших битов (0o777), OpenFile возвращает ошибку.

func (*Root) Name 1.24

func (r *Root) Name() string

Name возвращает имя каталога, представленное OpenRoot.

Безопасно вызывать Name после [Close].

func (*Root) Open 1.24

func (r *Root) Open(name string) (*File, error)

Open открывает указанный файл в корне для чтения. Подробнее см. Open.

func (*Root) OpenFile 1.24

func (r *Root) OpenFile(name string, flag int, perm FileMode) (*File, error)

OpenFile открывает указанный файл в корне. Подробнее см. OpenFile.

Если perm содержит биты, отличные от девяти младших битов (0o777), OpenFile возвращает ошибку.

func (*Root) OpenRoot 1.24

func (r *Root) OpenRoot(name string) (*Root, error)

OpenRoot открывает указанный каталог в корне. При возникновении ошибки она будет типа *PathError.

func (*Root) Remove 1.24

func (r *Root) Remove(name string) error

Remove удаляет указанный файл или (пустой) каталог в корне. Подробнее см. Remove.

func (*Root) Stat 1.24

func (r *Root) Stat(name string) (FileInfo, error)

Stat возвращает FileInfo, описывающую указанный файл в корне. Подробнее см. Stat.

type Signal

Signal представляет операционный сигнал. Обычная реализация зависит от операционной системы: в Unix это syscall.Signal.

type Signal interface {
    String() string
    Signal() // to distinguish from other Stringers
}

Единственные значения сигналов, гарантированно присутствующие в пакете os на всех системах, — это os.Interrupt (отправить процессу прерывание) и os.Kill (принудительно завершить процесс). В Windows отправка os.Interrupt процессу с помощью os.Process.Signal не реализована; вместо этого будет возвращена ошибка.

var (
    Interrupt Signal = syscall.SIGINT
    Kill      Signal = syscall.SIGKILL
)

type SyscallError

SyscallError записывает ошибку из конкретного системного вызова.

type SyscallError struct {
    Syscall string
    Err     error
}

func (*SyscallError) Error

func (e *SyscallError) Error() string

func (*SyscallError) Timeout 1.10

func (e *SyscallError) Timeout() bool

Timeout сообщает, представляет ли эта ошибка таймаут.

func (*SyscallError) Unwrap 1.13

func (e *SyscallError) Unwrap() error

Подкаталоги

Имя Синопсис
..
exec Пакет exec запускает внешние команды.
signal Пакет signal реализует доступ к входящим сигналам.
user Пакет user позволяет искать учетные записи пользователей по имени или идентификатору.

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/os/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API