Source file src/os/types.go

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package os
     6  
     7  import (
     8  	"io/fs"
     9  	"syscall"
    10  )
    11  
    12  // Getpagesize returns the underlying system's memory page size.
    13  func Getpagesize() int { return syscall.Getpagesize() }
    14  
    15  // File represents an open file descriptor.
    16  type File struct {
    17  	*file // os specific
    18  }
    19  
    20  // A FileInfo describes a file and is returned by Stat and Lstat.
    21  type FileInfo = fs.FileInfo
    22  
    23  // A FileMode represents a file's mode and permission bits.
    24  // The bits have the same definition on all systems, so that
    25  // information about files can be moved from one system
    26  // to another portably. Not all bits apply to all systems.
    27  // The only required bit is ModeDir for directories.
    28  type FileMode = fs.FileMode
    29  
    30  // The defined file mode bits are the most significant bits of the FileMode.
    31  // The nine least-significant bits are the standard Unix rwxrwxrwx permissions.
    32  // The values of these bits should be considered part of the public API and
    33  // may be used in wire protocols or disk representations: they must not be
    34  // changed, although new bits might be added.
    35  const (
    36  	// The single letters are the abbreviations
    37  	// used by the String method's formatting.
    38  	ModeDir        = fs.ModeDir        // d: is a directory
    39  	ModeAppend     = fs.ModeAppend     // a: append-only
    40  	ModeExclusive  = fs.ModeExclusive  // l: exclusive use
    41  	ModeTemporary  = fs.ModeTemporary  // T: temporary file; Plan 9 only
    42  	ModeSymlink    = fs.ModeSymlink    // L: symbolic link
    43  	ModeDevice     = fs.ModeDevice     // D: device file
    44  	ModeNamedPipe  = fs.ModeNamedPipe  // p: named pipe (FIFO)
    45  	ModeSocket     = fs.ModeSocket     // S: Unix domain socket
    46  	ModeSetuid     = fs.ModeSetuid     // u: setuid
    47  	ModeSetgid     = fs.ModeSetgid     // g: setgid
    48  	ModeCharDevice = fs.ModeCharDevice // c: Unix character device, when ModeDevice is set
    49  	ModeSticky     = fs.ModeSticky     // t: sticky
    50  	ModeIrregular  = fs.ModeIrregular  // ?: non-regular file; nothing else is known about this file
    51  
    52  	// Mask for the type bits. For regular files, none will be set.
    53  	ModeType = fs.ModeType
    54  
    55  	ModePerm = fs.ModePerm // Unix permission bits, 0o777
    56  )
    57  
    58  func (fs *fileStat) Name() string { return fs.name }
    59  func (fs *fileStat) IsDir() bool  { return fs.Mode().IsDir() }
    60  
    61  // SameFile reports whether fi1 and fi2 describe the same file.
    62  // For example, on Unix this means that the device and inode fields
    63  // of the two underlying structures are identical; on other systems
    64  // the decision may be based on the path names.
    65  // SameFile only applies to results returned by this package's Stat.
    66  // It returns false in other cases.
    67  func SameFile(fi1, fi2 FileInfo) bool {
    68  	fs1, ok1 := fi1.(*fileStat)
    69  	fs2, ok2 := fi2.(*fileStat)
    70  	if !ok1 || !ok2 {
    71  		return false
    72  	}
    73  	return sameFile(fs1, fs2)
    74  }
    75  

View as plain text