LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

возможно ли это сделать в user-space?

В общем случае это ни в каком -space сделать нельзя.

Если тебе нужно, чтобы для другого читающего процесса в файле по определённому пути были либо данные до твоей транзакции, либо после твоей транзакции, то это можно сделать так:

  1. Создаём новый файл в той же директории, что и существующий файл, который мы хотим изменить.
  2. Пишем в него все данные (копируем из существующего файла, как вариант).
  3. Изменяем этот новый файл, если нужно.
  4. Перемещаем новый файл на место старого при помощи функции rename(), про которую написано в мане:

    If newpath already exists, it will be atomically replaced, so that there is no point at which another process attempting to access newpath will find it missing.

Читающий процесс должен переоткрывать файл перед чтением, иначе он всегда будет видеть старый файл. Способ не быстрый, но проверенный и надёжный.

Если нужно что-то более сложное или быстрое, то лучше возьми готовую СУБД. Да хоть тот же sqlite.

Исходная версия Deleted, :

возможно ли это сделать в user-space?

В общем случае это ни в каком -space сделать нельзя.

Если тебе нужно, чтобы для другого читающего процесса в файле по определённому пути были либо данные до твоей транзакции, либо после твоей транзакции, то это можно сделать так:

  1. Создаём новый файл в той же директории, что и существующий файл, который мы хотим изменить.
  2. Пишем в него все данные (копируем из существующего файла, как вариант).
  3. Изменяем этот новый файл, если нужно.
  4. Перемещаем новый файл на место старого при помощи функции rename(), про которую написано в мане:

    If newpath already exists, it will be atomically replaced, so that there is no point at which another process attempting to access newpath will find it missing.

Способ не быстрый, но проверенный и надёжный.

Если нужно что-то более сложное или быстрое, то лучше возьми готовую СУБД. Да хоть тот же sqlite.