Documentation
¶
Overview ¶
Package osは、オペレーティングシステムの機能に対するプラットフォーム非依存のインターフェースを提供します。 設計はUnixライクですが、エラーハンドリングはGoのようです。失敗する呼び出しは、エラーナンバーではなくエラー型の値を返します。 エラーには、より詳細な情報が含まれることがよくあります。たとえば、ファイル名を受け取る呼び出し(OpenやStatなど)が失敗する場合、 エラーメッセージには失敗したファイル名が含まれ、その型は*PathErrorで、さらなる情報を抽出できます。 osインターフェースは、すべてのオペレーティングシステムで統一されたものとすることを意図しています。 一般的に利用できない機能は、システム固有のパッケージsyscallに現れます。 以下に、ファイルを開いて一部を読み込む簡単な例を示します。
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])
注意: File上の同時操作の最大数は、OSまたはシステムによって制限される場合があります。数は大きくするべきですが、それを超えるとパフォーマンスが低下したり他の問題が発生する可能性があります。
Index ¶
- Constants
- Variables
- 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 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
- type DirEntry
- type File
- 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)
- type FileInfo
- type FileMode
- type LinkError
- type PathError
- type ProcAttr
- type Process
- type 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
- type Signal
- type SyscallError
Examples ¶
Constants ¶
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 )
オープンファイル時に基になるシステムのものをラップするフラグ。すべてのフラグが与えられたシステム上で実装されているわけではありません。
const ( SEEK_SET int = 0 SEEK_CUR int = 1 SEEK_END int = 2 )
値を探す。
廃止: io.SeekStart、io.SeekCurrent、io.SeekEnd を使用してください。
const ( PathSeparator = '/' PathListSeparator = ':' )
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の一部と見なされ、 ワイヤープロトコルやディスクの表現で使用される場合があります。 これらの値は変更しないでくださいが、新しいビットが追加されるかもしれません。
const DevNull = "/dev/null"
DevNullはオペレーティングシステムの「nullデバイス」の名前です。 Unix-likeなシステムでは、"/dev/null"です。Windowsでは、"NUL"です。
Variables ¶
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 によってこれらのエラーと比較されることがあります。
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を閉じると、それらのメッセージは他の場所に転送される可能性があります。 たとえば、後で開かれるファイルに転送されるかもしれません。
var Args []string
Argsはコマンドラインの引数を保持し、プログラム名から開始します。
var ErrProcessDone = errors.New("os: process already finished")
ErrProcessDone は、プロセスが終了したことを示します。
Functions ¶
func Chmod ¶
Chmodは指定されたファイルのモードを変更します。 もしファイルがシンボリックリンクであれば、リンクのターゲットのモードを変更します。 エラーが発生した場合は、*PathError型になります。
オペレーティングシステムによって使用されるモードビットのサブセットが異なります。
Unixでは、モードのパーミッションビットであるModeSetuid、ModeSetgid、およびModeStickyが使用されます。
Windowsでは、モードの0200ビット(所有者書き込み可能)のみが使用されます。これにより、ファイルの読み取り専用属性が設定されるかクリアされるかが制御されます。 その他のビットは現在未使用です。Go 1.12以前との互換性を保つために、ゼロ以外のモードを使用してください。読み取り専用ファイルにはモード0400、読み書き可能なファイルにはモード0600を使用します。
Plan 9では、モードのパーミッションビットであるModeAppend、ModeExclusive、および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) } }
Output:
func Chown ¶
Chownは指定されたファイルの数値UIDとGIDを変更します。 ファイルがシンボリックリンクの場合、リンク先のUIDとGIDを変更します。 -1のUIDまたはGIDはその値を変更しないことを意味します。 エラーが発生した場合、型*PathErrorになります。
WindowsまたはPlan 9の場合、Chownは常にsyscall.EWINDOWSまたは EPLAN9のエラーを*PathErrorでラップして返します。
func Chtimes ¶
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) } }
Output:
func DirFS ¶ added in v1.16.0
DirFSはディレクトリdirをルートとするファイルツリーのファイルシステム(fs.FS)を返します。
ただし、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スタイルのセキュリティメカニズムの代替ではありません。
ディレクトリdirは空ではありません。
結果は[io/fs.StatFS]、io/fs.ReadFileFS、[io/fs.ReadDirFS]を実装しています。
func Executable ¶ added in v1.8.0
Executableは、現在のプロセスを開始した実行可能ファイルのパス名を返します。 パスがまだ正しい実行可能ファイルを指しているとは限りません。 プロセスの開始にシンボリックリンクが使用された場合、オペレーティングシステムによって結果は シンボリックリンクまたはそれが指していたパスになる可能性があります。 安定した結果が必要な場合は、path/filepath.EvalSymlinksが役立ちます。
Executableは、エラーが発生しない限り、絶対パスを返します。
主な利用ケースは、実行可能ファイルに対して相対的に配置されたリソースを見つけることです。
func Exit ¶
func Exit(code int)
Exitは指定されたステータスコードで現在のプログラムを終了させます。 慣習的に、コード0は成功を示し、非ゼロはエラーを示します。 プログラムは直ちに終了します。延期された関数は実行されません。
移植性のために、ステータスコードは[0, 125]の範囲内にあるべきです。
func Expand ¶
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 ¶
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 Getenv ¶
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 Getgroups ¶
Getgroupsは、呼び出し元が所属しているグループの数値IDの一覧を返します。
Windowsでは、syscall.EWINDOWSが返されます。代替手段については、os/userパッケージを参照してください。
func Getwd ¶
Getwdは現在のディレクトリに対応するルート付きパス名を返します。現在のディレクトリがシンボリックリンクによって複数のパスで到達可能な場合、Getwdはそのいずれかを返すことがあります。
func IsExist ¶
IsExistは、ファイルまたはディレクトリが既に存在することを報告する既知のエラーを示すブール値を返します。ErrExistで満たされるだけでなく、一部のシスコールエラーでも満たされます。 この関数はerrors.Isより前に存在しています。それはosパッケージによって返されるエラーのみをサポートしています。新しく書かれるコードでは、errors.Is(err, fs.ErrExist)を使用するべきです。
func IsNotExist ¶
IsNotExistは、ファイルやディレクトリが存在しないことを報告することがわかっているエラーかどうかを示すブール値を返します。これは、ErrNotExistと一部のsyscallエラーに合致します。 この関数は、errors.Isよりも前に存在していました。これは、osパッケージによって返されるエラーのみをサポートしています。新しいコードでは、errors.Is(err, fs.ErrNotExist)を使用する必要があります。
func IsPathSeparator ¶
IsPathSeparator は c がディレクトリの区切り文字であるかどうかを報告します。
func IsPermission ¶
IsPermissionは、エラーがパーミッションが拒否されたことを報告する既知のものであるかどうかを示すブール値を返します。 ErrPermissionだけでなく、一部のsyscallエラーも対応しています。
この関数はerrors.Isより前に存在しています。この関数はosパッケージが返すエラーのみをサポートしています。 新しいコードではerrors.Is(err、fs.ErrPermission)を使用するべきです。
func IsTimeout ¶ added in v1.10.0
IsTimeoutは、エラーがタイムアウトが発生したことを報告することを示すかどうかを示すブール値を返します。
この関数は、errors.Isやエラーがタイムアウトを示すかどうかの概念よりも前から存在しています。たとえば、UnixのエラーコードEWOULDBLOCKは、 タイムアウトを示す場合と示さない場合があります。新しいコードでは、os.ErrDeadlineExceededなど、エラーが発生した呼び出しに適切な値を使用して errors.Isを使用するべきです。
func Lchown ¶
Lchownは指定されたファイルの数値UIDとGIDを変更します。 ファイルがシンボリックリンクの場合、リンク自体のUIDとGIDを変更します。 エラーが発生した場合は、*PathError型のエラーが返されます。
Windowsでは、常にsyscall.EWINDOWSエラーが返され、*PathErrorでラップされます。
func LookupEnv ¶ added in v1.5.0
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 ¶
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) } }
Output:
func MkdirAll ¶
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) } }
Output:
func MkdirTemp ¶ added in v1.16.0
MkdirTempはディレクトリdir内に新しい一時ディレクトリを作成し、 新しいディレクトリのパス名を返します。 新しいディレクトリの名前は、patternの末尾にランダムな文字列を追加することで生成されます。 patternに"*"が含まれている場合、ランダムな文字列は最後の"*"に置換されます。 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) } }
Output:
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) } } }
Output:
func NewSyscallError ¶
NewSyscallErrorは、指定されたシステムコール名とエラーの詳細を持つ新しいSyscallErrorをエラーとして返します。 便利な機能として、errがnilの場合、NewSyscallErrorはnilを返します。
func ReadFile ¶ added in v1.16.0
ReadFileは指定されたファイルを読み込み、その内容を返します。 成功した呼び出しはerr == nilを返します。 err == EOFではありません。 ReadFileはファイル全体を読み込むため、ReadからのEOFをエラーとして報告しません。
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 RemoveAll ¶
RemoveAllはpathとその中に含まれるすべての子要素を削除します。 削除できる範囲で削除を実行しますが、最初に出会ったエラーを返します。 パスが存在しない場合、RemoveAllはnil(エラーなし)を返します。 エラーがある場合、それは*PathError型のエラーです。
func Rename ¶
Renameはoldpathをnewpathに名前を変更(移動)します。 newpathが既に存在していてディレクトリではない場合、Renameはそれを置き換えます。 oldpathとnewpathが異なるディレクトリにある場合、OS固有の制限が適用される場合があります。 同じディレクトリ内でも、非UnixプラットフォームではRenameはアトミックな操作ではありません。 エラーが発生した場合、それは*LinkErrorの型である可能性があります。
func SameFile ¶
SameFileはfi1とfi2が同じファイルを表しているかどうかを報告します。 例えば、Unixでは、2つの基礎となる構造体のデバイスとinodeフィールドが同一であることを意味します。他のシステムでは、決定はパス名に基づく場合もあります。 SameFileは、このパッケージのStatによって返された結果にのみ適用されます。 それ以外の場合はfalseを返します。
func Symlink ¶
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 Unsetenv ¶ added in v1.4.0
Unsetenvは1つの環境変数を削除します。
Example ¶
package main import ( "github.com/shogo82148/std/os" ) func main() { os.Setenv("TMPDIR", "/my/tmp") defer os.Unsetenv("TMPDIR") }
Output:
func UserCacheDir ¶ added in v1.11.0
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が定義されていない場合)は、エラーが返されます。
func UserConfigDir ¶ added in v1.13.0
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が定義されていない場合)は、エラーを返します。
func UserHomeDir ¶ added in v1.12.0
UserHomeDirは現在のユーザーのホームディレクトリを返します。
Unix(macOSを含む)では、$HOME環境変数を返します。 Windowsでは、%USERPROFILE%を返します。 Plan 9では、$home環境変数を返します。
環境変数に期待される変数が設定されていない場合、UserHomeDir は、プラットフォーム固有のデフォルト値または非nilのエラーを返します。
func WriteFile ¶ added in v1.16.0
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) } }
Output:
Types ¶
type DirEntry ¶ added in v1.16.0
DirEntryはディレクトリから読み込まれたエントリです (ReadDir関数やファイルのReadDirメソッドを使用して読み込まれます)。
func ReadDir ¶ added in v1.16.0
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()) } }
Output:
type File ¶
type File struct {
// contains filtered or unexported fields
}
Fileはオープンされたファイルディスクリプタを表します。
func Create ¶
Createは指定されたファイルを作成または切り詰めます。ファイルが既に存在する場合、ファイルは切り詰められます。ファイルが存在しない場合、モード0666(umaskの前)で作成されます。成功した場合、返されたFileのメソッドを使用してI/Oを行うことができます。関連付けられたファイルディスクリプタはO_RDWRモードになります。エラーが発生した場合、*PathError型のエラーとなります。
func CreateTemp ¶ added in v1.16.0
CreateTempはディレクトリdirに新しい一時ファイルを作成し、 ファイルを読み書きするために開き、結果のファイルを返します。 ファイル名はpatternを取り、末尾にランダムな文字列を追加して生成されます。 もしpatternに"*"が含まれている場合、最後の"*"はランダムな文字列に置き換えられます。 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) } }
Output:
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) } }
Output:
func NewFile ¶
NewFileは指定されたファイルディスクリプタと名前で新しいFileを返します。 fdが有効なファイルディスクリプタでない場合、返される値はnilになります。 Unixシステムでは、ファイルディスクリプタが非同期モードの場合、NewFileはSetDeadlineメソッドが動作するポーラブルなFileを返そうとします。
NewFileに渡した後、fdはFdメソッドのコメントで説明されている条件の下で無効になり、同じ制約が適用されます。
func Open ¶
Openは指定されたファイルを読み取り用に開きます。成功した場合、 返されたファイルのメソッドを使用して読み取りができます。 関連付けられたファイルディスクリプタはO_RDONLYのモードで持ちます。 エラーが発生した場合、*PathError型のエラーが返されます。
func OpenFile ¶
OpenFileは一般化されたオープンコールであり、ほとんどのユーザーは代わりにOpenまたはCreateを使用します。指定されたフラグ(O_RDONLYなど)で指定された名前のファイルを開きます。ファイルが存在しない場合、O_CREATEフラグが渡されると、モード許可(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, 0755) if err != nil { log.Fatal(err) } if err := f.Close(); err != nil { log.Fatal(err) } }
Output:
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) } }
Output:
func (*File) Chdir ¶
Chdirは現在の作業ディレクトリを指定されたディレクトリpathに変更します。 pathはディレクトリでなければなりません。 エラーが発生した場合、*PathErrorの型で返されます。
func (*File) Chown ¶
Chownは指定したファイルの数値uidとgidを変更します。 エラーが発生した場合、それは*PathErrorの型です。
Windowsでは、いつもsyscall.EWINDOWSのエラーを返し、*PathErrorにラップします。
func (*File) Close ¶
Closeはファイルを閉じて、I/Oに使用できなくします。 SetDeadlineをサポートするファイルでは、保留中のI/O操作はキャンセルされ、 ErrClosedエラーとともに即座に返ります。 Closeが既に呼び出されている場合はエラーが返されます。
func (*File) Fd ¶
Fdメソッドは、オープンされたファイルを参照する整数型のUnixファイルディスクリプタを返します。 fがクローズされると、ファイルディスクリプタは無効になります。 fがガベージコレクトされると、ファイナライザによってファイルディスクリプタがクローズされることがあります。 これにより、SetDeadlineメソッドが動作しなくなる可能性があります。 ファイルディスクリプタは再利用される可能性があるため、返されたファイルディスクリプタは fのCloseメソッドを通じてのみクローズするか、ガベージコレクション時のファイナライザによってクローズされます。 そうでない場合、ガベージコレクション時にはファイナライザが同じ(再利用された)番号を持つ他のファイルディスクリプタをクローズする可能性があります。
代替として、f.SyscallConnメソッドを参照してください。
func (*File) Read ¶
ReadはFileから最大len(b)バイトを読み込み、bに格納します。 読み込まれたバイト数とエラーがあればそれを返します。 ファイルの末尾では、Readは0とio.EOFを返します。
func (*File) ReadAt ¶
ReadAt はオフセット off から始まる File から len(b) バイトを読み取ります。 読み取ったバイト数とエラー(ある場合)を返します。 ReadAt は常に、n < len(b) の場合には非 nil のエラーを返します。 ファイルの終端では、そのエラーは io.EOF です。
func (*File) ReadDir ¶ added in v1.16.0
ReadDirはファイルfに関連付けられたディレクトリの内容を読み取り、ディレクトリの順序でDirEntry値のスライスを返します。 同じファイルに対する後続の呼び出しは、ディレクトリ内の後続のDirEntryレコードを生成します。
n > 0の場合、ReadDirは最大n個のDirEntryレコードを返します。 この場合、ReadDirが空のスライスを返す場合、なぜかを説明するエラーが返されます。 ディレクトリの終わりでは、エラーはio.EOFです。
n <= 0の場合、ReadDirはディレクトリに残っているすべてのDirEntryレコードを返します。 成功した場合、nilのエラーを返します(io.EOFではありません)。
func (*File) Readdir ¶
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 ¶
Readdirnamesは、ファイルに関連付けられたディレクトリの内容を読み取り、ディレクトリ内のファイルの名前を最大n個まで含むスライスを返します。追加の呼び出しでは、さらに名前を返します。
n>0の場合、Readdirnamesは最大n個の名前を返します。この場合、Readdirnamesが空のスライスを返す場合は、非nilのエラーが返され、その理由が説明されます。ディレクトリの終わりでは、エラーはio.EOFです。
n <= 0の場合、Readdirnamesはディレクトリからのすべての名前を単一のスライスで返します。この場合、Readdirnamesが成功し(ディレクトリの終わりまで読み込むことができる)、スライスとnilのエラーを返します。ディレクトリの終わり前にエラーが発生した場合、Readdirnamesはその時点まで読み取られた名前と非nilのエラーを返します。
func (*File) Seek ¶
Seekは、オフセットをオフセットに設定します。オフセットは、whenceによって解釈されます。 whenceの解釈は次のとおりです:0はファイルの原点に対する相対的なオフセット、1は現在のオフセットに対する相対的なオフセット、2は終端に対する相対的なオフセットを意味します。 エラーがあれば、新しいオフセットとエラーを返します。 O_APPENDで開かれたファイルに対するSeekの振る舞いは指定されていません。
func (*File) SetDeadline ¶ added in v1.10.0
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
SetReadDeadlineは、将来のRead呼び出しと現在ブロックされているRead呼び出しの締め切りを設定します。 tのゼロ値は、Readがタイムアウトしないことを意味します。 すべてのファイルが締め切りを設定できるわけではありません。SetDeadlineを参照してください。
func (*File) SetWriteDeadline ¶ added in v1.10.0
SetWriteDeadlineは、将来のWrite呼び出しや現在ブロックされているWrite呼び出しの締め切りを設定します。 Writeがタイムアウトしても、n>0が返される場合があります。 これは、一部のデータが正常に書き込まれたことを示します。 tのゼロ値は、Writeがタイムアウトしないことを意味します。 すべてのファイルが締め切りを設定できるわけではありません。SetDeadlineを参照してください。
func (*File) Sync ¶
Syncはファイルの現在の内容を安定したストレージへコミットします。 通常、これはファイルシステムのメモリ上のコピーをフラッシュし、 最近書き込まれたデータをディスクに書き込むことを意味しています。
func (*File) SyscallConn ¶ added in v1.12.0
SyscallConnは生のファイルを返します。 これはsyscall.Connインターフェースを実装しています。
func (*File) Write ¶
Writeはbからlen(b)バイトをFileに書き込みます。 書き込まれたバイト数とエラー(ある場合)を返します。 n != len(b)の場合、Writeはnilでないエラーを返します。
type FileInfo ¶
FileInfoはファイルを記述し、StatおよびLstatによって返されます。
type 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()) // 0400、0777 など。 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") } }
Output:
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 ¶
FindProcessは、pidによって実行中のプロセスを検索します。
返されるProcessは、基礎となるオペレーティングシステムのプロセスに関する情報を取得するために使用できます。
Unixシステムでは、FindProcessは常に成功し、プロセスが存在するかどうかに関わらず、指定されたpidのProcessを返します。 実際にプロセスが存在するかどうかをテストするには、p.Signal(syscall.Signal(0))がエラーを報告するかどうかを確認してください。
func StartProcess ¶
StartProcessは、name、argv、attrで指定されたプログラム、引数、属性で新しいプロセスを開始します。 argvスライスは新しいプロセスでos.Argsになるため、通常はプログラム名で始まります。
呼び出し元のgoroutineがruntime.LockOSThreadでオペレーティングシステムスレッドをロックし、継承可能なOSレベルのスレッド状態を変更した場合(例えば、LinuxやPlan 9の名前空間)、新しいプロセスは呼び出し元のスレッド状態を継承します。
StartProcessは低レベルなインターフェースです。os/execパッケージはより高レベルなインターフェースを提供します。
エラーが発生した場合、*PathError型となります。
func (*Process) Kill ¶
Killはプロセスを直ちに終了させます。Killはプロセスが実際に終了するのを待ちません。これによってプロセス自体のみを終了させるため、プロセスが起動した他のプロセスには影響を与えません。
func (*Process) Release ¶
Releaseはプロセスpに関連付けられたリソースを解放し、将来使用できなくします。 Waitが呼び出されない場合にのみReleaseを呼び出す必要があります。
func (*Process) Wait ¶
func (p *Process) Wait() (*ProcessState, error)
Waitはプロセスの終了を待ち、その後、状態とエラー(あれば)を示す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) 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 Signal ¶
type Signal interface { String() string Signal() }
Signalはオペレーティングシステムのシグナルを表します。 通常、基礎となる実装はオペレーティングシステムに依存します: Unixではsyscall.Signalです。
type SyscallError ¶
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
Source Files
¶
- dir.go
- dir_unix.go
- dirent_linux.go
- endian_little.go
- env.go
- error.go
- error_errno.go
- error_posix.go
- exec.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
- pipe2_unix.go
- proc.go
- rawconn.go
- readfrom_linux.go
- removeall_at.go
- stat.go
- stat_linux.go
- stat_unix.go
- sticky_notbsd.go
- str.go
- sys.go
- sys_linux.go
- sys_unix.go
- tempfile.go
- types.go
- types_unix.go
- wait_waitid.go
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によるユーザーアカウントの検索を可能にします。 |