os File的操作

几个操作:

os.NewFile(fd, "aName")  包装一个文件描述符,比如:uintptr(syscall.Stderr)

os.Create("fileName")   创建文件,如果文件已存在,会被清空内容

os.Open("fileName")  打开现有的文件,只读

os.OpenFile("fileName", OPERATION_MODE, FileMode)   创建或者打开文件

其中 os.Open 和 os.Create 都是 os.OpenFile 的封装,从源码可以看出他们的为啥具有对应的行为约束:

 

操作模式:

  • os.O_RDONLY  只读不可写
  • os.O_WRONLY  只写不可读,如果编辑为只写,对其调用Read()编译的时候不会报错,但是读不到内容。此时写会从0位置写入内容,如果原来有内容,会被覆盖。
  • os.O_RDWR  可读可写。此时写入时,如果已经读取过内容,则会在最后读取/写入的位置后面写入(此处有个偏移量在控制,实际使用中可以使用os.Seek()来调整)。
  • os.O_APPEND:当向文件中写入内容时,把新内容追加到现有内容的后边。
  • os.O_CREATE:当给定路径上的文件不存在时,创建一个新文件。
  • os.O_EXCL:需要与os.O_CREATE一同使用,表示在给定的路径上不能有已存在的文件。
  • os.O_SYNC:在打开的文件之上实施同步I/O。它会保证读写的内容总会与硬盘上的数据保持同步。
  • os.O_TRUNC:如果文件已存在,并且是常规的文件,那么就先清空其中已经存在的任何内容。

文件权限:

FileMode其实是uint32类型,其中低9位为文件权限。

比如0777是 rwxrwxrwx,0321是-wx-w---x。使用FileMode也实现了String()接口,可以打印出权限内容。

注意,为了确保权限设置正确,在使用中最好先使用syscall.Umask(0)清空mask内容。mask是权限的掩码限制,一般认为是为了限定用户设定文件的权限下限,比如mask为0022,那么FileMode为0666的时候,实际创建的文件是0666-0022=0644。

 

posted @ 2022-09-30 08:53  _zxq  阅读(330)  评论(0编辑  收藏  举报