Copyright 2009 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

package os

import (
	
	
	
)
Portable analogs of some common system call errors. Errors returned from this package may be tested against these errors with errors.Is.
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"
)

func () error     { return oserror.ErrClosed }
func () error { return poll.ErrNoDeadline }
errDeadlineExceeded returns the value for os.ErrDeadlineExceeded. This error comes from the internal/poll package, which is also used by package net. Doing this this way ensures that the net package will return os.ErrDeadlineExceeded for an exceeded deadline, as documented by net.Conn.SetDeadline, without requiring any extra work in the net package and without requiring the internal/poll package to import os (which it can't, because that would be circular).
func () error { return poll.ErrDeadlineExceeded }

type timeout interface {
	Timeout() bool
}
PathError records an error and the operation and file path that caused it.
SyscallError records an error from a specific system call.
type SyscallError struct {
	Syscall string
	Err     error
}

func ( *SyscallError) () string { return .Syscall + ": " + .Err.Error() }

func ( *SyscallError) () error { return .Err }
Timeout reports whether this error represents a timeout.
func ( *SyscallError) () bool {
	,  := .Err.(timeout)
	return  && .Timeout()
}
NewSyscallError returns, as an error, a new SyscallError with the given system call name and error details. As a convenience, if err is nil, NewSyscallError returns nil.
func ( string,  error) error {
	if  == nil {
		return nil
	}
	return &SyscallError{, }
}
IsExist returns a boolean indicating whether the error is known to report that a file or directory already exists. It is satisfied by ErrExist as well as some syscall errors. This function predates errors.Is. It only supports errors returned by the os package. New code should use errors.Is(err, os.ErrExist).
func ( error) bool {
	return underlyingErrorIs(, ErrExist)
}
IsNotExist returns a boolean indicating whether the error is known to report that a file or directory does not exist. It is satisfied by ErrNotExist as well as some syscall errors. This function predates errors.Is. It only supports errors returned by the os package. New code should use errors.Is(err, os.ErrNotExist).
func ( error) bool {
	return underlyingErrorIs(, ErrNotExist)
}
IsPermission returns a boolean indicating whether the error is known to report that permission is denied. It is satisfied by ErrPermission as well as some syscall errors. This function predates errors.Is. It only supports errors returned by the os package. New code should use errors.Is(err, os.ErrPermission).
IsTimeout returns a boolean indicating whether the error is known to report that a timeout occurred. This function predates errors.Is, and the notion of whether an error indicates a timeout can be ambiguous. For example, the Unix error EWOULDBLOCK sometimes indicates a timeout and sometimes does not. New code should use errors.Is with a value appropriate to the call returning the error, such as os.ErrDeadlineExceeded.
func ( error) bool {
	,  := underlyingError().(timeout)
	return  && .Timeout()
}

Note that this function is not errors.Is: underlyingError only unwraps the specific error-wrapping types that it historically did, not all errors implementing Unwrap().
	 = underlyingError()
	if  ==  {
		return true
To preserve prior behavior, only examine syscall errors.
	,  := .(syscallErrorType)
	return  && .Is()
}
underlyingError returns the underlying error for known os error types.
func ( error) error {
	switch err := .(type) {
	case *PathError:
		return .Err
	case *LinkError:
		return .Err
	case *SyscallError:
		return .Err
	}
	return