LINUX.ORG.RU

Мультиплексор поставить и кидать ему команды от процессов. Кстати, в бизнесе та же байда с доступом на склад.

Irma ★★★
()
Ответ на: комментарий от Irma

Не, сложно, более простые варианты нужны. Какую-нибудь может волшебную блокировку поставить?

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Поставь волшебную конструкцию вида «попробовал - получил ошибку удаления - пауза 1 секунда - иди в начало».

Irma ★★★
()
Ответ на: комментарий от Irma

нет, там другое, процесс падает, если не может записать в файл (как я понял в момент его копирования)

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Очень сильно подозреваю, что на уровне файловой системы конфликт доступа решается штатно, просто ты неправильно делаешь вызов процедуры записи.

Irma ★★★
()

Попробуй сперва переместить под уникальным именем и только потом копировать.

unDEFER ★★★★★
()

Создай третий процесс который будет принимать команды от них и синхронизировать.

bcon
()

У тебя именно процессы или треды?

Если треды - то наверняка pthread и тогда pthread_mutex_lock/unlock при доступе к файлу.

Если именно процессы, то либо классический локфайл, либо sem_wait/sem_post, либо можно например в shm создать кусок памяти завести в нём pthread_mutex и дальше пользоваться pthread_mutex_lock/unlock.

Stanson ★★★★★
()
Ответ на: комментарий от unDEFER

Хм, а насколько будет вероятность что в момент переименовки файл будет писаться? Вообще он пишется где то раз в 1-2 сек.

gobot ★★★★
() автор топика

у тебя алгоритм полностью не прописан.
Что должно происходить, если первый процесс производит файлы быстрее чем второй их потребляет?
Блокировка первого процесса? Формирование очереди файлов? Перезапись файла? Другое?

MirandaUser2
()
Ответ на: комментарий от gobot

Так-то переименование-перемещение должно быть одной атомарной транзакцией в моём понимании. Но вы лучше попробуйте, поиспытывайте. Это ещё от файловой системы может зависеть.

unDEFER ★★★★★
()
Ответ на: комментарий от unDEFER

Понял, спасибо, решение мне кажется самое оптимальное, на копирование конечно же больше времени уходит на порядок. зачем я вообще копировал не знаю сам )

А...вот почему копировал. Файло же нельзя переименовать когда файл пишется... мда... дела

gobot ★★★★
() автор топика
Последнее исправление: gobot (всего исправлений: 1)

Опиши нормально проблему, начни с того чтобы процитировать эту самую ошибку доступа и уточнить, в каком именно месте ты её видишь. И опиши желаемый результат чётко.

firkax ★★★★★
()
Ответ на: комментарий от gobot

А...вот почему копировал. Файло же нельзя переименовать когда файл пишется... мда... дела

Глупости, можно. Или ты спалившийся виндузятник?

firkax ★★★★★
()
Ответ на: комментарий от firkax

Можно разве?

Или ты спалившийся виндузятник

О господи...

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

В смысле нельзя? Разве? Насколько я знаю имя изменяется, а инф. узел остаётся и может быть в том числе открыт для записи любым процессом.

unDEFER ★★★★★
()
Ответ на: комментарий от gobot

Файло же нельзя переименовать когда файл пишется…

Почему? Именно переименовал, и копируй себе спокойно.

Aceler ★★★★★
()

я бы делал так:

  1. проц1 создает файл с именем $(mktemp) …
  2. проц1 переименовывает файл в /tmp/file_ready
  3. проц2 увидел файл /tmp/file_ready и переименовывает его в $(mktemp)
  4. проц2 копирует файл …
x905 ★★★★★
()
Ответ на: комментарий от x905

Он не указал желаемую логику работы, поэтому не факт что этот вариант именно то что он хочет.

firkax ★★★★★
()

Что мешает переименовать файл перед копированием, а потом работать с переименованным файлом?

vel ★★★★★
()

создавать файл с другим именем. делать rename в правильное имя.

ckotctvo
()

lsof если файла нет в списке,значит закрыт и можешь копировать или что там собираешься с ним делать

anonymous
()

inotify во все поля.

anonymous
()

Просто добавь Кафку. Один процесс запихивает файл в топик, второй процесс считывает файл из топика, а кафка в докер-композ работает.

Дешево и сердито.

Nurmukh ★★★
()

Странно, что никто не написал про flock. Да, это не самое ынтерпрайзное решение, но для нужд ТСа может быть достаточно.

annulen ★★★★★
()

Научить первый процесс быть повежливее.

anc ★★★★★
()
Ответ на: комментарий от gobot

Ну дык проверьте перед запуском ffmpeg что файл не занят man fuser.

anc ★★★★★
()
Ответ на: комментарий от gobot

Вообще он пишется где то раз в 1-2 сек.

экстремально не выполнимое задание вы себе нарисовали.

anc ★★★★★
()
Ответ на: комментарий от gobot

Файло же нельзя переименовать когда файл пишется... мда... дела

как раз можно.

anc ★★★★★
()
Ответ на: комментарий от annulen

Странно, что никто не написал про flock.

Странно что все что-то советуют, при том что ТС так и не сформулировал конкретную задачу.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Всегда можно дать совет исходя из минимум предложенной информации и не ныть требуя полное ТЗ

anonymous
()
Ответ на: комментарий от anonymous

Это не нытьё. Советуя наобум можно насоветовать что-то совершенно непригодное и вредное. Автор действительно не указал ряд существенных деталей, от которых неизбежно зависит правильное решение, и пренебрежение ими будет вести к систематической порче или потере данных, или и тому и тому вместе.

Впрочем, автора порча данных возможно устраивает, но нормальные люди в таком участвовать не захотят.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Ты не понимаешь банальных вещей, как отвечать на вопросы с недостаточными вводными. Поучись у ChatGPT5. Никаких «наобум».

На все неизвестные делается оговрка «Если вы имели в виду …» Ответ выстраиваится в последовательную логическую цепь с разветвлениями, охватывающими все варианты. Никаких вредных советов быть не может.

Но тут нужно применять мышление, которое отвечающему обычно делать лень. Ему проще достать из своих знаний готовый ответ с нужной полочки.

anonymous
()
Ответ на: комментарий от anonymous

Ты не понимаешь банальных вещей, как отвечать на вопросы с недостаточными вводными

Мало кому доступно подобное понимание, такого рода специалисты скорее всего заняты решением совсем других проблем за серьезные деньги и врядли присутствуют здесь

По теме дискуссии см. Проблема XY

alx777 ★★
()

Подними микро сервис и передавай по сети через кубер. Файлы это не web-scale. Плюс портят диск.

anonymous
()

думаю тебе мой вариант не очень, я fifo создавал куда пишут и его читал, не заморачиваясь копирыванием и созданием.

s-warus ★★★★
()

другой процесс его хочет скопировать и удалить

Можно через хардлинк, например. После удаления файла первым процессом его содержимое останется под другим именем.

Radjah ★★★★★
()

Похожая задача решена миллион лет назад в logrotate. Суть в том, что лог переименовывается из /var/log/xyz в /var/log/xyz.1, но сервис xyz его держит открытым и продолжает писать по дескриптору (и пофиг на имя). После переименовывания logrotate пинает (sighup или перезапуск) сервис, чтобы он закрыл лог и открыл снова. Сервис открывает+создаёт лог с дефолтным именем /var/log/xyz и продолжает штатно работать, а /var/log/xyz.1 можно спокойно обрабатывать, сжимать, удалять. При этом ни одна строка данных не теряется.

legolegs ★★★★★
()
Ответ на: комментарий от gobot

создаёшь локфайл, если создался работаешь, если не создался - ждёшь.

Линуксовые файловые блокировки вешь волшебная…

Dark_SavanT ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.