что если я открыл файл в одном потоке, то второй поток (новый запуск программы) не начнёт делать то же самое? без костылей типа "давай проверим, что файл можно удалить. Если нет, то открыт где-то" Ну и решение нужно кроссплатформенное
Создавать .swp как делает vim
Ну мне нужно наоборот избезать того, чтобы файл изменялся с нескольких сторон
При открытии файла пытаешься создать <filename>.swp (<filename> - имя файла, который открываешь) Если получилось - то файл нигде не открыт и ты можешь его редактировать Если не получилось - то где-то открыт, и редактировать нельзя При закрытии файла удаляешь <filename>.swp, если на первом шаге он был успешно создан
Это вообще невозможно сделать. ТЕМ БОЛЕЕ КРОССПЛАТФОРМЕННО.
Мне казалось, что в stdlib добавляли мьютексы.
А причём тут они
Почему это? Vim ведь делает
А причём тут мьютексы?
Нет не делает
Для предотвращения одновременного доступа к общему ресурсу.
У меня делает
он свап файл создает вроде
Ну так и есть, чем не решение? Кросс-платформенное
Мьютекс — это только РЕКОМЕНДАЦИЯ программе. ПОпробуй захвати мьютекс, и если у тебя получится, можешь писать в файл. Но программа может не проверять мьютекс, писать в файл сразу.
а если прога упадет
Что он делает-то?
Предупреждает, что файл уже открыт в другом vim'е
можно по сокетам спросить у других потоков открыт ли файл)))
Правильное поведение зависит от платформы. Если ФС или VFS не предоставляет какие-либо атомарные операции (например, переименование файла или создание симлинка), то механизм, которые основывается на их использовании в одной системе, на системе без них работать не будет.
Я подумал, там речь про треды в рамках одного процесса.
Короче, если на винде — поставь при открытии атрибуты файла, запрещающие разделение с другими. (вроде бы это по умолчанию стоит) Если на других операционках — можно только посылать себе самому какие-то сигналы, что этот файл уже открыт. Именованный Мьютекс = хороший вариант.
а че не создавать lock файл перед открытием с флагами ФС типа - если существует - ошибку кинуть?
ну грубо говоря так и происходит
Обсуждают сегодня