Что такое os.File

Reading time ~1 minute

Файл — это не просто значок на рабочем столе. Это структурированный набор данных, который хранится на диске и управляется операционной системой (ОС).

В Go работа с файлами строится на двух китах:

  • пакет os для низкоуровневых операций (открытие файла, закрытие файла, чтение или запись файла)
  • пакет io для абстракции ввода-вывода

Когда файл открывается в Go, то на выходе получается объект типа *os.File. Это не просто “ссылка” на файл — это структура, которая содержит:

  • дескриптор файла
  • позиция чтения/записи (offset)
  • метаданные

Дескриптор файла

Дескриптор — это целое число, которое ОС присваивает открытому файлу. Это как номер столика в ресторане: официант (ОС) знает, что заказ (данные) относится к вашему столику (файлу).

Зачем нужно? ОС использует дескрипторы для управления всеми открытыми файлами. Каждая программа имеет ограничение на количество дескрипторов (зависит от ОС).

file, _ := os.Open("awesome_file.txt")
fmt.Printf("Дескриптор файла %d\n", file.Fd()) // -> Выведет число, например, 3

Позиция чтения и записи

Это указатель, который определяет, с какого места в файле начнется следующая операция чтения или записи в файл. Как работает?

  • при открытии файла offset = 0 (начало файла)
  • после чтения N байт offset сдвигается на N
  • при записи offset перемещается в конец записанных данных

Метаданные

Объект os.File хранит информацию о файле:

  • путь к файлу в файловой системе ОС
  • режим доступа (чтение, запись и т.д.)
  • права доступа (например -> 0644)

Права доступа — это набор разрешений, который определяет, какие действия могут выполнять разные категории пользователей в ОС с файлом. Обычно права задаются в восьмеричной системе (0XYZ), где:

  • X — права владельца (User)
  • Y — права группы (Group)
  • Z — права остальных (Others)

Каждая цифра — сумма следующих флагов:

  • 4 (r) — чтение: право открывать и просматривать содержимое файла
  • 2 (w) — запись: право изменять или дописывать файл
  • 1 (x) — выполнение: право запускать файл как программу

Например, 0644 означает, что владелец может читать и записывать файл (6 = 4 + 2), а группа и остальные имеют только право чтения (4).

RxJs - стратегии обработки ошибок

Стратегия замены (подмены)Самый простой вариант - это стратегия замены:const stream$ = from([1, 2, 3, 'text', 4, 5]);stream$ .pipe( m...… Continue reading

RxJs - способы отписаться

Published on July 28, 2024

VSC - explorer.compactFolders

Published on July 21, 2024