Константа os.O_RDWR

Константа os.O_RDWR используется при открытии файлов и указывает, что файл должен быть открыт одновременно для чтения и записи. Она передается в функцию os.OpenFile в качестве второго аргумента - флага доступа. При использовании этой константы с другими флагами, такими как os.O_CREATE или os.O_APPEND, задается комбинированный режим работы с файлом.

Синтаксис

goos.OpenFile(name, os.O_RDWR, perm)

Пример

Давайте откроем существующий файл для чтения и записи, прочитаем его содержимое и добавим новую строку:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.OpenFile("example.txt", os.O_RDWR, 0644)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer file.Close()

  data := make([]byte, 100)
  n, err := file.Read(data)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Printf("Read %d bytes: %s", n, data[:n])

  _, err = file.WriteString("\nNew line")
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println("Data written successfully")
}

Результат выполнения кода:

go"Read 23 bytes: Existing file content"
"Data written successfully"

Пример

Давайте создадим новый файл и откроем его для чтения и записи с использованием комбинированных флагов:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.OpenFile(
    "newfile.txt",
    os.O_RDWR|os.O_CREATE|os.O_TRUNC,
    0666,
  )
  if err != nil {
    fmt.Println(err)
    return
  }
  defer file.Close()

  _, err = file.WriteString("Hello, World!")
  if err != nil {
    fmt.Println(err)
    return
  }

  data := make([]byte, 100)
  n, err := file.Seek(0, 0)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Printf("Seek position: %d\n", n)

  count, err := file.Read(data)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Printf("Read content: %s", data[:count])
}

Результат выполнения кода:

go"Seek position: 0"
"Read content: Hello, World!"

Смотрите также

  • константу os.O_RDONLY,
    которая открывает файл только для чтения
  • константу os.O_WRONLY,
    которая открывает файл только для записи
  • константу os.O_CREATE,
    которая создает файл, если он не существует
  • функцию os.OpenFile,
    которая открывает файл с указанными флагами