os

package
v1.26.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 15, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

osパッケージは、オペレーティングシステムの機能へのプラットフォームに依存しないインターフェースを提供します。 デザインはUnix風ですが、エラーハンドリングはGo風です。失敗した呼び出しはエラー番号ではなく、 error型の値を返します。しばしば、エラー内にさらに詳細な情報が含まれています。 例えば、ファイル名を取る呼び出しが失敗した場合、OpenStat など、エラーは印刷時に失敗したファイル名を含み、 *PathError 型になります。これはさらなる情報のためにアンパックすることができます。

file, err := os.Open("file.go") // 読み込みアクセス用。
if err != nil {
	log.Fatal(err)
}

オープンが失敗した場合、エラーメッセージは自己説明的であるようになります。

open file.go: ファイルまたはディレクトリが存在しません。

ファイルのデータは、バイトのスライスに読み込むことができます。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])

Concurrency

[File]のメソッドはファイルシステムの操作に対応しています。すべてが 同時実行に対して安全です。Fileに対する同時操作の最大数は、OSまたはシステムによって 制限される可能性があります。その数は高いはずですが、それを超えるとパフォーマンスが低下したり、 他の問題が発生する可能性があります。

Index

Examples

Constants

View Source
const (
	// O_RDONLY、O_WRONLY、またはO_RDWRのいずれかを指定する必要があります。
	O_RDONLY int = syscall.O_RDONLY
	O_WRONLY int = syscall.O_WRONLY
	O_RDWR   int = syscall.O_RDWR
	// 残りの値はOrで結合して動作を制御できます。
	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
)

オープンファイル時に基になるシステムのものをラップするフラグ。すべてのフラグが与えられたシステム上で実装されているわけではありません。

View Source
const (
	SEEK_SET int = 0
	SEEK_CUR int = 1
	SEEK_END int = 2
)

値を探す。

廃止: io.SeekStart、io.SeekCurrent、io.SeekEnd を使用してください。

View Source
const (
	PathSeparator     = '/'
	PathListSeparator = ':'
)
View Source
const (

	// 単一の文字は、Stringメソッドの書式設定で使用される略語です。
	ModeDir        = fs.ModeDir
	ModeAppend     = fs.ModeAppend
	ModeExclusive  = fs.ModeExclusive
	ModeTemporary  = fs.ModeTemporary
	ModeSymlink    = fs.ModeSymlink
	ModeDevice     = fs.ModeDevice
	ModeNamedPipe  = fs.ModeNamedPipe
	ModeSocket     = fs.ModeSocket
	ModeSetuid     = fs.ModeSetuid
	ModeSetgid     = fs.ModeSetgid
	ModeCharDevice = fs.ModeCharDevice
	ModeSticky     = fs.ModeSticky
	ModeIrregular  = fs.ModeIrregular

	// タイプビット用のマスク。通常のファイルでは、何も設定されません。
	ModeType = fs.ModeType

	ModePerm = fs.ModePerm
)

定義されたファイルモードのビットは、FileMode の最上位ビットです。 最下位の9ビットは、標準のUnixのrwxrwxrwxパーミッションです。 これらのビットの値は、パブリックAPIの一部と見なされ、 ワイヤープロトコルやディスクの表現で使用される場合があります。 これらの値は変更しないでくださいが、新しいビットが追加されるかもしれません。

View Source
const DevNull = "/dev/null"

DevNullはオペレーティングシステムの「nullデバイス」の名称です。 Unix系のシステムでは"/dev/null"、Windowsでは"NUL"です。

Variables

View Source
var (

	// ErrInvalidは無効な引数を示します。
	// Fileのメソッドは、レシーバーがnilの場合にこのエラーを返します。
	ErrInvalid = fs.ErrInvalid

	ErrPermission = fs.ErrPermission
	ErrExist      = fs.ErrExist
	ErrNotExist   = fs.ErrNotExist
	ErrClosed     = fs.ErrClosed

	ErrNoDeadline       = errNoDeadline()
	ErrDeadlineExceeded = errDeadlineExceeded()
)

一部の一般的なシステムコールエラーのポータブルな代替です。

このパッケージから返されるエラーは、errors.Is によってこれらのエラーと比較されることがあります。

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

Stdin、Stdout、およびStderrは、標準入力、標準出力、および標準エラーファイルディスクリプタを指すオープンファイルです。

Goランタイムは、パニックやクラッシュの場合には標準エラーに書き込みます。 Stderrを閉じると、それらのメッセージは他の場所に転送される可能性があります。 たとえば、後で開かれるファイルに転送されるかもしれません。

View Source
var Args []string

Argsはコマンドラインの引数を保持し、プログラム名から開始します。

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

ErrProcessDone は、Process が終了したことを示します。

Functions

func Chdir

func Chdir(dir string) error

Chdirはカレントワーキングディレクトリを指定されたディレクトリに変更します。 エラーが発生した場合、それは *PathError 型になります。

func Chmod

func Chmod(name string, mode FileMode) error

Chmodは指定されたファイルのモードをmodeに変更します。 ファイルがシンボリックリンクの場合は、リンク先のモードを変更します。 エラーが発生した場合、それは *PathError 型になります。

オペレーティングシステムによって使用されるモードビットのサブセットが異なります。

Unixでは、モードのパーミッションビット ModeSetuidModeSetgid、および ModeSticky が使用されます。

Windowsでは、モードの0o200ビット(所有者書き込み可能)のみが使用されます。 これにより、ファイルの読み取り専用属性が設定されるかクリアされるかが制御されます。 その他のビットは現在未使用です。 Go 1.12以前との互換性を保つために、ゼロ以外のモードを使用してください。 読み取り専用ファイルにはモード0o400、読み書き可能なファイルにはモード0o600を使用します。

Plan 9では、モードのパーミッションビット ModeAppendModeExclusive、および ModeTemporary が使用されます。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

func main() {
	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を変更します。 -1のUIDまたはGIDはその値を変更しないことを意味します。 エラーが発生した場合、型 *PathError になります。

WindowsまたはPlan 9では、Chownは常に syscall.EWINDOWS または syscall.EPLAN9 のエラーを *PathError でラップして返します。

func Chtimes

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

Chtimesは指定されたファイルのアクセス時間と修正時間を変更します。これはUnixのutime()やutimes()関数と同様です。 ゼロの time.Time 値は、対応するファイルの時間を変更しません。

基礎となるファイルシステムは、値を切り捨てたり、より正確でない時間単位に丸めたりするかもしれません。 エラーが発生した場合、*PathError 型になります。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
	"github.com/shogo82148/std/time"
)

func main() {
	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 added in v1.23.0

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

CopyFSは、ファイルシステムfsysをディレクトリdirにコピーします。 必要に応じてdirを作成します。

ファイルは、元の実行権限を加えたモード0o666で作成され、 ディレクトリはモード0o777(umask適用前)で作成されます。

CopyFSは既存のファイルを上書きしません。fsys内のファイル名が すでに宛先に存在する場合、CopyFSは errors.Is(err, fs.ErrExist) がtrueとなる エラーを返します。

dir内のシンボリックリンクは辿られます。

CopyFSの実行中にfsysに新しいファイルが追加された場合(dirがfsysのサブディレクトリの場合も含む) それらがコピーされる保証はありません。

コピーは最初に発生したエラーで停止し、そのエラーを返します。

func DirFS added in v1.16.0

func DirFS(dir string) fs.FS

DirFS returns a file system (an fs.FS) for the tree of files rooted at the directory 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.StatFSio/fs.ReadFileFSio/fs.ReadDirFS、および io/fs.ReadLinkFS を実装します。

func Environ

func Environ() []string

Environは環境を表す文字列のコピーを返します。 形式は「key=value」です。

func Executable added in v1.8.0

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)と同等です。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/os"
)

func main() {
	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))

}
Output:
Good morning, Gopher!

func ExpandEnv

func ExpandEnv(s string) string

ExpandEnvは、文字列内の${var}または$varを現在の環境変数の値に応じて置換します。未定義の変数への参照は空文字列に置換されます。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/os"
)

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

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

}
Output:
gopher lives in /usr/gopher.

func Getegid

func Getegid() int

Getegidは呼び出し元の数値形式の有効グループIDを返します。

Windowsでは、-1を返します。

func Getenv

func Getenv(key string) string

Getenvはキーで指定された環境変数の値を取得します。 もし変数が存在しない場合、空の値が返されます。 空の値と未設定の値を区別するためには、LookupEnv を使用してください。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/os"
)

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

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

}
Output:
gopher lives in /usr/gopher.

func Geteuid

func Geteuid() int

Geteuidは呼び出し元の数値効果的ユーザーIDを返します。

Windowsでは-1が返されます。

func Getgid

func Getgid() int

Getgidは呼び出し元のグループIDの数値を返します。

Windowsでは、-1を返します。

func Getgroups

func Getgroups() ([]int, error)

Getgroupsは、呼び出し元が所属しているグループの数値IDの一覧を返します。

Windowsでは、syscall.EWINDOWS が返されます。代替手段については、os/user パッケージを参照してください。

func Getpagesize

func Getpagesize() int

Getpagesizeは、基礎となるシステムのメモリページサイズを返します。

func Getpid

func Getpid() int

Getpidは呼び出し元のプロセスIDを返します。

func Getppid

func Getppid() int

Getppidは呼び出し元の親プロセスのプロセスIDを返します。

func Getuid

func Getuid() int

Getuidは呼び出し元のユーザーの数値IDを返します。

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]および一部のsyscallエラーによって満たされます。

この関数は、errors.Is よりも前に存在していました。これは、osパッケージによって返されるエラーのみをサポートしています。 新しいコードでは、errors.Is(err, fs.ErrExist)を使用するべきです。

func IsNotExist

func IsNotExist(err error) bool

IsNotExistは、引数がファイルまたはディレクトリが存在しないことを報告するかどうかを示すブール値を返します。 これは[ErrNotExist]および一部のsyscallエラーによって満たされます。

この関数は、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]および一部のsyscallエラーによって満たされます。

この関数はerrors.Isより前に存在しています。この関数はosパッケージが返すエラーのみをサポートしています。 新しいコードでは、errors.Is(err、fs.ErrPermission)を使用するべきです。

func IsTimeout added in v1.10.0

func IsTimeout(err error) bool

IsTimeoutは、引数がタイムアウトが発生したことを報告するかどうかを示すブール値を返します。

この関数は、errors.Is やエラーがタイムアウトを示すかどうかの概念よりも前から存在しています。たとえば、UnixのエラーコードEWOULDBLOCKは、 タイムアウトを示す場合と示さない場合があります。新しいコードでは、os.ErrDeadlineExceeded など、エラーが発生した呼び出しに適切な値を使用して errors.Isを使用するべきです。

func Lchown

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

Lchownは指定されたファイルの数値UIDとGIDを変更します。 ファイルがシンボリックリンクの場合、リンク自体のUIDとGIDを変更します。 エラーが発生した場合は、*PathError 型のエラーが返されます。

Windowsでは、常に syscall.EWINDOWS エラーを *PathError でラップして返します。

func Link(oldname, newname string) error

Link は newname を oldname ファイルのハードリンクとして作成します。 エラーがある場合、*LinkError 型になります。

func LookupEnv added in v1.5.0

func LookupEnv(key string) (string, bool)

LookupEnvは、キーで指定された環境変数の値を取得します。 もし環境変数が存在する場合、値(空である可能性があります)と真偽値trueが返されます。 そうでなければ、返される値は空で、真偽値はfalseです。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/os"
)

func main() {
	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")

}
Output:
SOME_KEY=value
EMPTY_KEY=
MISSING_KEY not set

func Mkdir

func Mkdir(name string, perm FileMode) error

Mkdirは指定された名前とパーミッションビット(umask適用前)で新しいディレクトリを作成します。 エラーが発生した場合、それは[*PathError]型になります。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

func main() {
	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は、パスという名前のディレクトリと、必要な親ディレクトリを作成し、nilを返します。 それ以外の場合はエラーを返します。 MkdirAllが作成するすべてのディレクトリには、パーミッションビットperm(umaskの前)が使用されます。 パスが既にディレクトリである場合、MkdirAllは何もせずにnilを返します。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

func main() {
	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 added in v1.16.0

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

MkdirTempはディレクトリdir内に新しい一時ディレクトリを作成し、 新しいディレクトリのパス名を返します。 新しいディレクトリの名前は、patternの末尾にランダムな文字列を追加することで生成されます。 patternに"*"が含まれている場合、ランダムな文字列は最後の"*"に置換されます。 ファイルは、umaskを適用する前に、モード0o600で作成されます。 dirが空の文字列の場合、MkdirTempは一時ファイルのデフォルトディレクトリ(TempDirによって返される)を使用します。 同時に複数のプログラムやゴルーチンがMkdirTempを呼び出しても、同じディレクトリを選択しません。 ディレクトリは不要になった時に削除するのは呼び出し元の責任です。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
	"github.com/shogo82148/std/path/filepath"
)

func main() {
	dir, err := os.MkdirTemp("", "example")
	if err != nil {
		log.Fatal(err)
	}
	defer os.RemoveAll(dir) // クリーンアップ

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

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
	"github.com/shogo82148/std/path/filepath"
)

func main() {
	logsDir, err := os.MkdirTemp("", "*-logs")
	if err != nil {
		log.Fatal(err)
	}
	defer os.RemoveAll(logsDir) // クリーンアップ

	// ログは必要に応じて早期にクリーニングアウトできます
	// *-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 added in v1.16.0

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

ReadFile reads the named file and returns the contents. A successful call returns err == nil, not err == EOF. Because ReadFile reads the whole file, it does not treat an EOF from Read as an error to be reported.

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

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

}
Output:
Hello, Gophers!
func Readlink(name string) (string, error)

Readlinkは指定されたシンボリックリンクのリンク先を返します。 エラーが発生した場合、それは *PathError 型になります。

リンク先が相対的な場合、Readlinkはそれを絶対パスに解決せずに 相対パスを返します。

func Remove

func Remove(name string) error

Removeは指定されたファイルまたは(空の)ディレクトリを削除します。 エラーが発生した場合、エラーは *PathError 型になります。

func RemoveAll

func RemoveAll(path string) error

RemoveAllはpathとその中に含まれるすべての子要素を削除します。 削除できる範囲で削除を実行しますが、最初に出会ったエラーを返します。 パスが存在しない場合、RemoveAllはnil(エラーなし)を返します。 エラーがある場合、それは *PathError 型のエラーです。

func Rename

func Rename(oldpath, newpath string) error

Renameはoldpathをnewpathに名前を変更(移動)します。 newpathが既に存在していてディレクトリではない場合、Renameはそれを置き換えます。 oldpathとnewpathが異なるディレクトリにある場合、OS固有の制限が適用される場合があります。 同じディレクトリ内でも、非UnixプラットフォームではRenameはアトミックな操作ではありません。 エラーが発生した場合、それは*LinkErrorの型である可能性があります。

func SameFile

func SameFile(fi1, fi2 FileInfo) bool

SameFileはfi1とfi2が同じファイルを表しているかどうかを報告します。 例えば、Unixでは、2つの基礎となる構造体のデバイスとinodeフィールドが同一であることを意味します。他のシステムでは、決定はパス名に基づく場合もあります。 SameFileは、このパッケージの Stat によって返された結果にのみ適用されます。 それ以外の場合はfalseを返します。

func Setenv

func Setenv(key, value string) error

Setenvは、キーで指定された環境変数の値を設定します。 エラーがある場合は、エラーを返します。

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 added in v1.4.0

func Unsetenv(key string) error

Unsetenvは1つの環境変数を削除します。

Example
package main

import (
	"github.com/shogo82148/std/os"
)

func main() {
	os.Setenv("TMPDIR", "/my/tmp")
	defer os.Unsetenv("TMPDIR")
}

func UserCacheDir added in v1.11.0

func UserCacheDir() (string, error)

UserCacheDirは、ユーザー固有のキャッシュデータに使用するデフォルトのルートディレクトリを返します。 ユーザーはこのディレクトリ内にアプリケーション固有のサブディレクトリを作成して使用する必要があります。

Unixシステムでは、https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html で指定されている $XDG_CACHE_HOMEが空でない場合はその値を返し、そうでない場合は$HOME/.cacheを返します。 Darwinでは、$HOME/Library/Cachesを返します。 Windowsでは、%LocalAppData%を返します。 Plan 9では、$home/lib/cacheを返します。

位置を特定できない場合(例えば、$HOMEが定義されていない場合)、エラーを返します。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
	"github.com/shogo82148/std/path/filepath"
	"github.com/shogo82148/std/sync"
)

func main() {
	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 added in v1.13.0

func UserConfigDir() (string, error)

UserConfigDirは、ユーザー固有の設定データに使用するデフォルトのルートディレクトリを返します。 ユーザーはこのディレクトリ内にアプリケーション固有のサブディレクトリを作成して使用する必要があります。

Unixシステムでは、https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html で指定されている $XDG_CONFIG_HOMEが空でない場合はその値を返し、そうでない場合は$HOME/.configを返します。 Darwinでは、$HOME/Library/Application Supportを返します。 Windowsでは、%AppData%を返します。 Plan 9では、$home/libを返します。

位置を特定できない場合(例えば、$HOMEが定義されていない場合)、エラーを返します。

Example
package main

import (
	"github.com/shogo82148/std/bytes"
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
	"github.com/shogo82148/std/path/filepath"
)

func main() {
	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 added in v1.12.0

func UserHomeDir() (string, error)

UserHomeDirは現在のユーザーのホームディレクトリを返します。

Unix(macOSを含む)では、$HOME環境変数を返します。 Windowsでは、%USERPROFILE%を返します。 Plan 9では、$home環境変数を返します。

環境変数に期待される変数が設定されていない場合、UserHomeDir は、プラットフォーム固有のデフォルト値または非nilのエラーを返します。

func WriteFile added in v1.16.0

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

WriteFileはデータを指定されたファイルに書き込みます。必要に応じて新規作成されます。 ファイルが存在しない場合、WriteFileはパーミッションperm(umaskの前に)で作成します。 ファイルが存在する場合、WriteFileは書き込み前にファイルを切り詰め、パーミッションは変更しません。 WriteFileは複数のシステムコールが必要なため、途中で失敗するとファイルは一部だけ書き込まれた状態になる可能性があります。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

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

Types

type DirEntry added in v1.16.0

type DirEntry = fs.DirEntry

DirEntryはディレクトリから読み込まれたエントリです (ReadDir 関数やファイルの File.ReadDir メソッドを使用して読み込まれます)。

func ReadDir added in v1.16.0

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

ReadDirは指定されたディレクトリを読み込み、 ファイル名順にソートされたすべてのディレクトリエントリを返します。 ディレクトリの読み込み中にエラーが発生した場合、 ReadDirはエラーが発生する前に読み込むことができたエントリと共にエラーを返します。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

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

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

type File

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

Fileはオープンされたファイルディスクリプタを表します。

Fileのメソッドは並行使用に対して安全です。

func Create

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

Createは指定された名前のファイルを作成または切り詰めます。 ファイルが既に存在する場合は切り詰められます。存在しない場合はモード0o666(umask適用前)で作成されます。 成功した場合、返されたFileのメソッドでI/Oが可能です。関連付けられたファイルディスクリプタは O_RDWR モードです。 ファイルを含むディレクトリは既に存在している必要があります。 エラーが発生した場合、それは *PathError 型になります。

func CreateTemp added in v1.16.0

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

CreateTempはディレクトリdirに新しい一時ファイルを作成し、 ファイルを読み書きするために開き、結果のファイルを返します。 ファイル名はpatternを取り、末尾にランダムな文字列を追加して生成されます。 もしpatternに"*"が含まれている場合、最後の"*"はランダムな文字列に置き換えられます。 ファイルは、umaskを適用する前に、モード0o600で作成されます。 dirが空の文字列の場合、CreateTempは一時ファイル用のデフォルトディレクトリ(TempDir が返す)を使用します。 同時にCreateTempを呼び出す複数のプログラムやゴルーチンは同じファイルを選びません。 呼び出し元は、ファイルのNameメソッドを使用してファイルのパス名を取得できます。 ファイルが不要になったら、呼び出し元の責任でファイルを削除する必要があります。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

func main() {
	f, err := os.CreateTemp("", "example")
	if err != nil {
		log.Fatal(err)
	}
	defer os.Remove(f.Name()) // クリーンアップ

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

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

func main() {
	f, err := os.CreateTemp("", "example.*.txt")
	if err != nil {
		log.Fatal(err)
	}
	defer os.Remove(f.Name()) // クリーンアップ

	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 を返します。 fdが有効なファイルディスクリプタでない場合、返される値はnilになります。

NewFileの挙動はプラットフォームによって異なります:

  • Unixでは、fdがノンブロッキングモードの場合、NewFileはポーリング可能なファイルを返そうとします。
  • Windowsでは、fdが非同期I/O用にオープンされている場合(つまり、syscall.FILE_FLAG_OVERLAPPEDsyscall.CreateFile 呼び出しで指定されている場合)、NewFileはGoランタイムのI/O完了ポートに fdを関連付けてポーリング可能なファイルを返そうとします。 関連付けに失敗した場合、I/O操作は同期的に実行されます。

ポーリング可能なファイルのみが File.SetDeadlineFile.SetReadDeadlineFile.SetWriteDeadline をサポートします。

fdをNewFileに渡した後は、File.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のメソッドでI/Oが可能です。 エラーが発生した場合、それは *PathError 型になります。

Example
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

func main() {
	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)
	}
}
Example (Append)
package main

import (
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

func main() {
	// ファイルが存在しない場合は作成し、ファイルに追記する
	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() // エラーを無視する; エラーが優先される
		log.Fatal(err)
	}
	if err := f.Close(); err != nil {
		log.Fatal(err)
	}
}

func OpenInRoot added in v1.25.0

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

OpenInRoot opens the file name in the directory dir. It is equivalent to OpenRoot(dir) followed by opening the file in the root.

OpenInRoot returns an error if any component of the name references a location outside of dir.

See Root for details and limitations.

func (*File) Chdir

func (f *File) Chdir() error

Chdirは現在の作業ディレクトリを指定されたディレクトリpathに変更します。 pathはディレクトリでなければなりません。 エラーが発生した場合、*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 を閉じて、I/Oに使用できなくします。 File.SetDeadline をサポートするファイルでは、保留中のI/O操作はキャンセルされ、 ErrClosed エラーとともに即座に返ります。 Closeが既に呼び出されている場合はエラーが返されます。

func (*File) Fd

func (f *File) Fd() uintptr

Fdは、オープンされているファイルを参照するシステムのファイルディスクリプタまたはハンドルを返します。 fがクローズされている場合、ディスクリプタは無効になります。 fがガベージコレクトされた場合、ファイナライザによってディスクリプタがクローズされ、無効になることがあります。 ファイナライザがいつ実行されるかについては runtime.SetFinalizer を参照してください。

返されたディスクリプタをクローズしないでください。後でfをクローズした際に、無関係なディスクリプタがクローズされる可能性があります。

Fdの挙動はプラットフォームによって異なります:

  • UnixおよびWindowsでは、File.SetDeadline メソッドが動作しなくなります。
  • Windowsでは、ファイルディスクリプタはGoランタイムのI/O完了ポートから切り離されます。 これはファイルに対して同時I/O操作がない場合に発生します。

ほとんどの場合、f.SyscallConnメソッドの使用を推奨します。

func (*File) Name

func (f *File) Name() string

NameはOpenに渡されたファイルの名前を返します。

[Close]の後にNameを呼び出しても安全です。

func (*File) Read

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

ReadはFileから最大len(b)バイトを読み取り、bに格納します。 読み取ったバイト数と発生したエラーを返します。 ファイルの終端では、Readは0, io.EOFを返します。

func (*File) ReadAt

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

ReadAt はオフセット off から始まる File から len(b) バイトを読み取ります。 読み取ったバイト数とエラー(ある場合)を返します。 ReadAt は常に、n < len(b) の場合には非 nil のエラーを返します。 ファイルの終端では、そのエラーは io.EOF です。

func (*File) ReadDir added in v1.16.0

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

ReadDirはファイルfに関連付けられたディレクトリの内容を読み取り、ディレクトリの順序でDirEntry値のスライスを返します。 同じファイルに対する後続の呼び出しは、ディレクトリ内の後続のDirEntryレコードを生成します。

n > 0の場合、ReadDirは最大n個の DirEntry レコードを返します。 この場合、ReadDirが空のスライスを返す場合、なぜかを説明するエラーが返されます。 ディレクトリの終わりでは、エラーは io.EOF です。

n <= 0の場合、ReadDirはディレクトリに残っているすべてのDirEntryレコードを返します。 成功した場合、nilのエラーを返します(io.EOFではありません)。

func (*File) ReadFrom added in v1.15.0

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はファイルに関連付けられたディレクトリの内容を読み取り、 ディレクトリの順序で Lstat によって返される最大n個の FileInfo 値のスライスを返します。 同じファイルに対する後続の呼び出しは、さらにFileInfosを返します。

n > 0の場合、Readdirは最大n個のFileInfo構造体を返します。この場合、 Readdirが空のスライスを返すと、非nilのエラーが返されます。 ディレクトリの末尾では、エラーは io.EOF です。

n <= 0の場合、Readdirはディレクトリ内のすべてのFileInfoを 単一のスライスで返します。この場合、Readdirが成功した場合 (ディレクトリの終わりまで読み込む)、スライスとnilのエラーが返されます。 ディレクトリの終わりより前にエラーが発生した場合、Readdirはその地点まで読み取った FileInfoと非nilのエラーを返します。

パフォーマンスの向上のため、ほとんどのクライアントはより効率的なReadDirメソッドを使用することができます。

func (*File) Readdirnames

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

Readdirnamesは、ファイルに関連付けられたディレクトリの内容を読み取り、ディレクトリ内のファイルの名前を最大n個まで含むスライスを返します。追加の呼び出しでは、さらに名前を返します。

n>0の場合、Readdirnamesは最大n個の名前を返します。この場合、Readdirnamesが空のスライスを返す場合は、非nilのエラーが返され、その理由が説明されます。ディレクトリの終わりでは、エラーは 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は、次回のReadまたはWriteのためのファイルオフセットをoffsetに設定します。 whenceの値によって解釈が異なります:0はファイルの先頭から、1は現在のオフセットから、2はファイルの末尾からの相対値です。 新しいオフセット値と、エラーがあればそれを返します。 O_APPEND フラグ付きでオープンされたファイルに対するSeekの挙動は未定義です。

func (*File) SetDeadline added in v1.10.0

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

SetDeadlineは、ファイルの読み取りと書き込みのデッドラインを設定します。 SetReadDeadlineおよびSetWriteDeadlineの両方を呼び出すのと同等です。

デッドラインを設定できるファイルの種類には制限があります。デッドラインをサポートしないファイルにSetDeadlineを呼び出すと、ErrNoDeadlineが返されます。 ほとんどのシステムでは、通常のファイルはデッドラインをサポートしませんが、パイプはサポートします。

デッドラインは、I/Oのブロックではなく、エラーとなる絶対時刻です。デッドラインは、未来および保留中のすべてのI/Oに適用されます。ただし、即座に次のReadまたはWrite呼び出しに適用されるわけではありません。 デッドラインが超過された後は、将来のデッドラインを設定することで、接続をリフレッシュできます。

デッドラインが超過されると、ReadまたはWriteまたは他のI/Oメソッドの呼び出しは、ErrDeadlineExceededをラップしたエラーを返します。 これは、errors.Is(err, os.ErrDeadlineExceeded)を使用してテストできます。 そのエラーにはTimeoutメソッドが実装されており、Timeoutメソッドを呼び出すとtrueが返ります。ただし、デッドラインが超過されていなくても、Timeoutがtrueを返す可能性がある他のエラーもあります。

成功したReadまたはWrite呼び出しの後、デッドラインを繰り返し延長することでアイドルタイムアウトを実装できます。

tのゼロ値は、I/O操作がタイムアウトしないことを意味します。

func (*File) SetReadDeadline added in v1.10.0

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

SetReadDeadlineは、将来のRead呼び出しと現在ブロックされているRead呼び出しの締め切りを設定します。 tのゼロ値は、Readがタイムアウトしないことを意味します。 すべてのファイルが締め切りを設定できるわけではありません。SetDeadlineを参照してください。

func (*File) SetWriteDeadline added in v1.10.0

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

SetWriteDeadlineは、将来のWrite呼び出しや現在ブロックされているWrite呼び出しの締め切りを設定します。 Writeがタイムアウトしても、n>0が返される場合があります。 これは、一部のデータが正常に書き込まれたことを示します。 tのゼロ値は、Writeがタイムアウトしないことを意味します。 すべてのファイルが締め切りを設定できるわけではありません。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 added in v1.12.0

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

SyscallConnは生のファイルを返します。 これはsyscall.Connインターフェースを実装しています。

func (*File) Truncate

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

Truncateはファイルのサイズを変更します。 I/Oオフセットは変更しません。 エラーが発生した場合、*PathError 型になります。

func (*File) Write

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

Writeはbからlen(b)バイトをFileに書き込みます。 書き込まれたバイト数とエラー(ある場合)を返します。 n != len(b)の場合、Writeはnilでないエラーを返します。

func (*File) WriteAt

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

WriteAtはオフセットoffから始まるFileにlen(b)バイトを書き込みます。 書き込まれたバイト数とエラー(ある場合)を返します。 n != len(b)の場合、WriteAtはnilでないエラーを返します。

ファイルが O_APPEND フラグ付きでオープンされている場合、WriteAt はエラーを返します。

func (*File) WriteString

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

WriteStringはWriteと似ていますが、バイトのスライスではなく、文字列sの内容を書き込みます。

func (*File) WriteTo added in v1.22.0

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

WriteToは、io.WriterToのWriteToメソッドを実装します。

type FileInfo

type FileInfo = fs.FileInfo

FileInfoはファイルを記述し、Stat および Lstat によって返されます。

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

type FileMode = fs.FileMode

FileModeはファイルのモードと許可ビットを表します。 ビットはすべてのシステムで同じ定義を持っているため、 ファイルの情報をシステム間で移動する際に移植性があります。 すべてのビットがすべてのシステムで適用されるわけではありません。 必須のビットは ModeDir であり、ディレクトリに対して適用されます。

Example
package main

import (
	"github.com/shogo82148/std/fmt"
	"github.com/shogo82148/std/io/fs"
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/os"
)

func main() {
	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

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

LinkErrorはリンクやシンボリックリンク、リネームのシステムコール中に発生したエラーと、それによって引き起こされたパスを記録します。

func (*LinkError) Error

func (e *LinkError) Error() string

func (*LinkError) Unwrap added in v1.13.0

func (e *LinkError) Unwrap() error

type PathError

type PathError = fs.PathError

PathErrorはエラーメッセージとそれを引き起こした操作とファイルパスを記録します。

type ProcAttr

type ProcAttr struct {

	// Dir が空でない場合、子プロセスを作成する前にディレクトリに変更します。
	Dir string

	// もしEnvがnilでない場合、それは新しいプロセスの環境変数をEnvironによって返される形式で指定します。
	// もしEnvがnilである場合、Environの結果が使用されます。
	Env []string

	// Filesは新しいプロセスに引き継がれるオープンファイルを指定します。最初の3つのエントリは標準入力、標準出力、標準エラーに対応します。実装は、基になるオペレーティングシステムに応じて、追加のエントリをサポートすることがあります。nilのエントリは、そのファイルがプロセスの開始時に閉じられることを意味します。
	// Unixシステムでは、StartProcessはこれらのFile値をブロッキングモードに変更します。つまり、SetDeadlineは動作しなくなり、Closeを呼び出してもReadまたはWriteが中断されません。
	Files []*File

	// オペレーティングシステム固有のプロセス作成属性です。
	// このフィールドを設定すると、プログラムが正常に実行されない場合や、
	// 一部のオペレーティングシステムではコンパイルすらできないことがあります。
	Sys *syscall.SysProcAttr
}

ProcAttrはStartProcessによって開始される新しいプロセスに適用される属性を保持します。

type Process

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

Processは StartProcess によって作成されたプロセスに関する情報を格納します。

func FindProcess

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

FindProcessは、pidによって実行中のプロセスを検索します。

返される Process は、基礎となるオペレーティングシステムのプロセスに関する情報を取得するために使用できます。

Unixシステムでは、FindProcessは常に成功し、プロセスが存在するかどうかに関わらず、指定されたpidのProcessを返します。 実際にプロセスが存在するかどうかをテストするには、p.Signal(syscall.Signal(0))がエラーを報告するかどうかを確認してください。

func StartProcess

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

StartProcessは、name、argv、attrで指定されたプログラム、引数、属性で新しいプロセスを開始します。 argvスライスは新しいプロセスで os.Args になるため、通常はプログラム名で始まります。

呼び出し元のgoroutineが runtime.LockOSThread でオペレーティングシステムスレッドをロックし、継承可能なOSレベルのスレッド状態を変更した場合(例えば、LinuxやPlan 9の名前空間)、新しいプロセスは呼び出し元のスレッド状態を継承します。

StartProcessは低レベルなインターフェースです。os/exec パッケージはより高レベルなインターフェースを提供します。

エラーが発生した場合、*PathError 型となります。

func (*Process) Kill

func (p *Process) Kill() error

Killは Process を直ちに終了させます。Killはプロセスが実際に終了するのを待ちません。これによってプロセス自体のみを終了させるため、プロセスが起動した他のプロセスには影響を与えません。

func (*Process) Release

func (p *Process) Release() error

Releaseは Process pに関連付けられたリソースを解放し、将来使用できなくします。 Process.Wait が呼び出されない場合にのみReleaseを呼び出す必要があります。

func (*Process) Signal

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

Signalは Process にシグナルを送信します。 Windowsでは Interrupt を送信することは実装されていません。

func (*Process) Wait

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

Waitは Process の終了を待ち、その後、状態とエラー(あれば)を示すProcessStateを返します。 Waitはプロセスに関連するリソースを解放します。 ほとんどのオペレーティングシステムでは、プロセスは現在のプロセスの子であるか、エラーが返されます。

type ProcessState

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

ProcessStateはWaitによって報告されるプロセスの情報を格納します。

func (*ProcessState) ExitCode added in v1.12.0

func (p *ProcessState) ExitCode() int

ExitCodeは終了したプロセスの終了コードを返します。プロセスがまだ終了していない場合や、シグナルによって終了した場合は-1を返します。

func (*ProcessState) Exited

func (p *ProcessState) Exited() bool

Exited はプログラムが終了したかどうかを報告します。 Unixシステムでは、この関数はプログラムが exit を呼び出して終了した場合に true を返し、 シグナルによってプログラムが終了した場合には false を返します。

func (*ProcessState) Pid

func (p *ProcessState) Pid() int

Pidは終了したプロセスのプロセスIDを返します。

func (*ProcessState) String

func (p *ProcessState) String() string

func (*ProcessState) Success

func (p *ProcessState) Success() bool

Successは、プログラムが正常に終了したかどうかを報告します。 たとえば、Unixでは終了ステータス0で終了した場合などです。

func (*ProcessState) Sys

func (p *ProcessState) Sys() any

Sysはプロセスに関するシステム依存の終了情報を返します。 それを適切な基礎となる型に変換して、その内容にアクセスします。 例:Unixの場合、syscall.WaitStatus として変換します。

func (*ProcessState) SysUsage

func (p *ProcessState) SysUsage() any

SysUsageは終了したプロセスのシステム依存のリソース使用状況情報を返します。それを適切な基に変換してください、例えばUnixでは *syscall.Rusage 型など、その内容にアクセスするために。 (Unixでは、*syscall.Rusageはgetrusage(2)マニュアルページで定義されているstruct rusageに一致します。)

func (*ProcessState) SystemTime

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

SystemTimeは終了したプロセスとその子プロセスのシステムCPU時間を返します。

func (*ProcessState) UserTime

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

UserTimeは終了したプロセスおよびその子プロセスのユーザーCPU時間を返します。

type Root added in v1.25.0

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

Root may be used to only access files within a single directory tree.

Methods on Root can only access files and directories beneath a root directory. If any component of a file name passed to a method of Root references a location outside the root, the method returns an error. File names may reference the directory itself (.).

Methods on Root will follow symbolic links, but symbolic links may not reference a location outside the root. Symbolic links must not be absolute.

Methods on Root do not prohibit traversal of filesystem boundaries, Linux bind mounts, /proc special files, or access to Unix device files.

Methods on Root are safe to be used from multiple goroutines simultaneously.

On most platforms, creating a Root opens a file descriptor or handle referencing the directory. If the directory is moved, methods on Root reference the original directory in its new location.

Root's behavior differs on some platforms:

  • When GOOS=windows, file names may not reference Windows reserved device names such as NUL and COM1.
  • On Unix, Root.Chmod, Root.Chown, and Root.Chtimes are vulnerable to a race condition. If the target of the operation is changed from a regular file to a symlink while the operation is in progress, the operation may be performed on the link rather than the link target.
  • When GOOS=js, Root is vulnerable to TOCTOU (time-of-check-time-of-use) attacks in symlink validation, and cannot ensure that operations will not escape the root.
  • When GOOS=plan9 or GOOS=js, Root does not track directories across renames. On these platforms, a Root references a directory name, not a file descriptor.
  • WASI preview 1 (GOOS=wasip1) does not support Root.Chmod.

func OpenRoot added in v1.25.0

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

OpenRoot opens the named directory. It follows symbolic links in the directory name. If there is an error, it will be of type *PathError.

func (*Root) Chmod added in v1.25.0

func (r *Root) Chmod(name string, mode FileMode) error

Chmod changes the mode of the named file in the root to mode. See Chmod for more details.

func (*Root) Chown added in v1.25.0

func (r *Root) Chown(name string, uid, gid int) error

Chown changes the numeric uid and gid of the named file in the root. See Chown for more details.

func (*Root) Chtimes added in v1.25.0

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

Chtimes changes the access and modification times of the named file in the root. See Chtimes for more details.

func (*Root) Close added in v1.25.0

func (r *Root) Close() error

Close closes the Root. After Close is called, methods on Root return errors.

func (*Root) Create added in v1.25.0

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

Create creates or truncates the named file in the root. See Create for more details.

func (*Root) FS added in v1.25.0

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

FS returns a file system (an fs.FS) for the tree of files in the root.

The result implements io/fs.StatFS, io/fs.ReadFileFS, io/fs.ReadDirFS, and io/fs.ReadLinkFS.

func (*Root) Lchown added in v1.25.0

func (r *Root) Lchown(name string, uid, gid int) error

Lchown changes the numeric uid and gid of the named file in the root. See Lchown for more details.

func (r *Root) Link(oldname, newname string) error

Link creates newname as a hard link to the oldname file. Both paths are relative to the root. See Link for more details.

If oldname is a symbolic link, Link creates new link to oldname and not its target. This behavior may differ from that of Link on some platforms.

When GOOS=js, Link returns an error if oldname is a symbolic link.

func (*Root) Lstat added in v1.25.0

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

Lstat returns a FileInfo describing the named file in the root. If the file is a symbolic link, the returned FileInfo describes the symbolic link. See Lstat for more details.

func (*Root) Mkdir added in v1.25.0

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

Mkdir creates a new directory in the root with the specified name and permission bits (before umask). See Mkdir for more details.

If perm contains bits other than the nine least-significant bits (0o777), Mkdir returns an error.

func (*Root) MkdirAll added in v1.25.0

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

MkdirAll creates a new directory in the root, along with any necessary parents. See MkdirAll for more details.

If perm contains bits other than the nine least-significant bits (0o777), MkdirAll returns an error.

func (*Root) Name added in v1.25.0

func (r *Root) Name() string

Name returns the name of the directory presented to OpenRoot.

It is safe to call Name after [Close].

func (*Root) Open added in v1.25.0

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

Open opens the named file in the root for reading. See Open for more details.

func (*Root) OpenFile added in v1.25.0

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

OpenFile opens the named file in the root. See OpenFile for more details.

If perm contains bits other than the nine least-significant bits (0o777), OpenFile returns an error.

func (*Root) OpenRoot added in v1.25.0

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

OpenRoot opens the named directory in the root. If there is an error, it will be of type *PathError.

func (*Root) ReadFile added in v1.25.0

func (r *Root) ReadFile(name string) ([]byte, error)

ReadFile reads the named file in the root and returns its contents. See ReadFile for more details.

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

Readlink returns the destination of the named symbolic link in the root. See Readlink for more details.

func (*Root) Remove added in v1.25.0

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

Remove removes the named file or (empty) directory in the root. See Remove for more details.

func (*Root) RemoveAll added in v1.25.0

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

RemoveAll removes the named file or directory and any children that it contains. See RemoveAll for more details.

func (*Root) Rename added in v1.25.0

func (r *Root) Rename(oldname, newname string) error

Rename renames (moves) oldname to newname. Both paths are relative to the root. See Rename for more details.

func (*Root) Stat added in v1.25.0

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

Stat returns a FileInfo describing the named file in the root. See Stat for more details.

func (r *Root) Symlink(oldname, newname string) error

Symlink creates newname as a symbolic link to oldname. See Symlink for more details.

Symlink does not validate oldname, which may reference a location outside the root.

On Windows, a directory link is created if oldname references a directory within the root. Otherwise a file link is created.

func (*Root) WriteFile added in v1.25.0

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

WriteFile writes data to the named file in the root, creating it if necessary. See WriteFile for more details.

type Signal

type Signal interface {
	String() string
	Signal()
}

Signalはオペレーティングシステムのシグナルを表します。 通常、基礎となる実装はオペレーティングシステムに依存します: Unixではsyscall.Signalです。

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

すべてのシステムのosパッケージで保証されている信号値は、os.Interrupt(プロセスに割り込みを送信する)とos.Kill(プロセスを強制的に終了する)のみです。Windowsでは、os.Process.Signalに対してos.Interruptを送信することは実装されていません。代わりにエラーが返されます。

type SyscallError

type SyscallError struct {
	Syscall string
	Err     error
}

SyscallErrorは特定のシステムコールからのエラーを記録します。

func (*SyscallError) Error

func (e *SyscallError) Error() string

func (*SyscallError) Timeout added in v1.10.0

func (e *SyscallError) Timeout() bool

Timeoutは、このエラーがタイムアウトを表すかどうかを報告します。

func (*SyscallError) Unwrap added in v1.13.0

func (e *SyscallError) Unwrap() error

Directories

Path Synopsis
execパッケージは外部コマンドを実行します。
execパッケージは外部コマンドを実行します。
internal/fdtest
Package fdtest provides test helpers for working with file descriptors across exec.
Package fdtest provides test helpers for working with file descriptors across exec.
Package signal implements access to incoming signals.
Package signal implements access to incoming signals.
userパッケージは、名前またはIDによるユーザーアカウントの検索を可能にします。
userパッケージは、名前またはIDによるユーザーアカウントの検索を可能にします。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL