[Golang]写文件的权限定义perm

 ioutil包中写文件的方法:

func WriteFile(filename string, data []byte, perm os.FileMode) error

关于权限的定义,可以参考golang源代码:\Go\src\os\types.go

perm是FileMode类型的:

type FileMode uint32

// The nine least-significant bits are the standard Unix rwxrwxrwx permissions.

const (

    ...

    ModePerm FileMode = 0777   // Unix permission bits

)

FileMode在所有的系统中定义都是相同的,常用的值定义如下:

const (

      OS_READ = 04

      OS_WRITE = 02

      OS_EX = 01

      OS_USER_SHIFT = 6

      OS_GROUP_SHIFT = 3

      OS_OTH_SHIFT = 0 

      OS_USER_R = OS_READ<<OS_USER_SHIFT

      OS_USER_W = OS_WRITE<<OS_USER_SHIFT

      OS_USER_X = OS_EX<<OS_USER_SHIFT

      OS_USER_RW = OS_USER_R | OS_USER_W

      OS_USER_RWX = OS_USER_RW | OS_USER_X

      OS_GROUP_R = OS_READ<<OS_GROUP_SHIFT

      OS_GROUP_W = OS_WRITE<<OS_GROUP_SHIFT

      OS_GROUP_X = OS_EX<<OS_GROUP_SHIFT

      OS_GROUP_RW = OS_GROUP_R | OS_GROUP_W

      OS_GROUP_RWX = OS_GROUP_RW | OS_GROUP_X

      OS_OTH_R = OS_READ<<OS_OTH_SHIFT

      OS_OTH_W = OS_WRITE<<OS_OTH_SHIFT

      OS_OTH_X = OS_EX<<OS_OTH_SHIFT

      OS_OTH_RW = OS_OTH_R | OS_OTH_W

      OS_OTH_RWX = OS_OTH_RW | OS_OTH_X

      OS_ALL_R = OS_USER_R | OS_GROUP_R | OS_OTH_R

      OS_ALL_W = OS_USER_W | OS_GROUP_W | OS_OTH_W

      OS_ALL_X = OS_USER_X | OS_GROUP_X | OS_OTH_X

      OS_ALL_RW = OS_ALL_R | OS_ALL_W

      OS_ALL_RWX = OS_ALL_RW | OS_GROUP_X)

      ...

)

一般都文件属性标识如下: 

-rwxrwxrwx

第1位:文件属性,一般常用的是"-",表示是普通文件;"d"表示是一个目录。

第2~4位:文件所有者的权限rwx (可读/可写/可执行)。

第5~7位:文件所属用户组的权限rwx (可读/可写/可执行)。

第8~10位:其他人的权限rwx (可读/可写/可执行)。

在golang中,可以使用os.FileMode(perm).String()来查看权限标识:

os.FileMode(0777).String()    //返回 -rwxrwxrwx

os.FileMode(0666).String()   //返回 -rw-rw-rw-

os.FileMode(0644).String()   //返回 -rw-r--r--

0777表示:创建了一个普通文件,所有人拥有所有的读、写、执行权限

0666表示:创建了一个普通文件,所有人拥有对该文件的读、写权限,但是都不可执行

0644表示:创建了一个普通文件,文件所有者对该文件有读写权限,用户组和其他人只有读权限,都没有执行权限

注意,golang中创建文件指定权限时,只能以"0XXX"的形式,不能省掉前面的"0",否则指定的权限不是预期的。如:

os.FileMode(777).String()   //返回 -r----x--x

os.FileMode(666).String()   //返回 --w--wx-w-

os.FileMode(644).String()   //返回 --w----r--

猜你喜欢

转载自blog.csdn.net/youngwhz1/article/details/89675137