Запретить изменение и удаление файла. Linux
От: Sandro_K Мухосранск  
Дата: 09.04.07 10:52
Оценка:
Моя программа открывает файл и записывает в него данные.
Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.


10.04.07 17:44: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Запретить изменение и удаление файла. Linux
От: TheBeard Россия  
Дата: 09.04.07 12:18
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

Надо поставить файлу соответствующие права доступа (0600). Это, правда, от root'а не спасет. Если файл создается при открытии, права можно указать в вызове open() (см. в документации константы S_*)
Re[2]: Запретить изменение и удаление файла. Linux
От: Sandro_K Мухосранск  
Дата: 09.04.07 13:26
Оценка:
Здравствуйте, TheBeard, Вы писали:

TB>Здравствуйте, Sandro_K, Вы писали:


S_K>>Моя программа открывает файл и записывает в него данные.

S_K>>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

TB>Надо поставить файлу соответствующие права доступа (0600). Это, правда, от root'а не спасет. Если файл создается при открытии, права можно указать в вызове open() (см. в документации константы S_*)


процесс должен сам писать в файл, а другие процессы не должны иметь возможность писать в файл или удалять его пока процесс не завершил запись, все процессы работают от имени одного пользователя, думаю что права доступа тут не спасут.
Re: Запретить изменение и удаление файла. Linux
От: zaufi Земля  
Дата: 09.04.07 13:29
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

залочь его целиком или регион
Re[2]: Запретить изменение и удаление файла. Linux
От: Sandro_K Мухосранск  
Дата: 09.04.07 13:40
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>Здравствуйте, Sandro_K, Вы писали:


S_K>>Моя программа открывает файл и записывает в него данные.

S_K>>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

Z>залочь его целиком или регион

Функция flock() не запрещает доступ к файлу другим процессам.
Можно ли в линуксе залочить файл в одном процессе так, чтоб другой процесс временно не мог писать в файл независимо от залочил он его или нет.
Re[3]: Запретить изменение и удаление файла. Linux
От: zaufi Земля  
Дата: 09.04.07 19:09
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Здравствуйте, zaufi, Вы писали:


Z>>Здравствуйте, Sandro_K, Вы писали:


S_K>>>Моя программа открывает файл и записывает в него данные.

S_K>>>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

Z>>залочь его целиком или регион

S_K>Функция flock() не запрещает доступ к файлу другим процессам.
S_K>Можно ли в линуксе залочить файл в одном процессе так, чтоб другой процесс временно не мог писать в файл независимо от залочил он его или нет.

почитай еще про fnctl
Re[4]: Запретить изменение и удаление файла. Linux
От: Аноним  
Дата: 10.04.07 06:50
Оценка:
Z>почитай еще про fnctl

Почитал, понял что сделать то, что я хочу с его помощью невозможно.
Re: Запретить изменение и удаление файла. Linux
От: Graf Alex Украина http://grafalex.oberon.kiev.ua
Дата: 10.04.07 07:15
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

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

В общем суть следующая: Ты можешь сам создать себе правила и по ним играть. В смысле того, что одно ТВОЕ приложение будет определенным образом лочить файл, а второе ТВОЕ приложение будет смотреть залочен ли файл. Ограничить доступ другим приложениям к этому файлу у тебя не получится... ИМХО
Во всяком случае длительные эксперименты ничего утешительного не рассказали...
Re: Запретить изменение и удаление файла. Linux
От: halka Украина  
Дата: 10.04.07 13:00
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

Переименуйте файл на время работы .
Re: Запретить изменение и удаление файла. Linux
От: Kemm  
Дата: 10.04.07 13:56
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

В юниксе нет mandatory lock'ов. Так что нельзя.
Re[2]: Запретить изменение и удаление файла. Linux
От: Kemm  
Дата: 10.04.07 13:57
Оценка:
Здравствуйте, halka, Вы писали:

S_K>>Моя программа открывает файл и записывает в него данные.

S_K>>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.
H>Переименуйте файл на время работы .

И чем это спасёт от записи чем-то другим в уже переименованый файл?
Re[3]: Запретить изменение и удаление файла. Linux
От: halka Украина  
Дата: 10.04.07 14:04
Оценка:
Здравствуйте, Kemm, Вы писали:

K>Здравствуйте, halka, Вы писали:


S_K>>>Моя программа открывает файл и записывает в него данные.

S_K>>>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.
H>>Переименуйте файл на время работы .

K>И чем это спасёт от записи чем-то другим в уже переименованый файл?


А откуда это что-то что может записать в наш файл узнает его новое имя?
Re[4]: Запретить изменение и удаление файла. Linux
От: Kemm  
Дата: 10.04.07 14:18
Оценка:
Здравствуйте, halka, Вы писали:

S_K>>>>Моя программа открывает файл и записывает в него данные.

S_K>>>>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.
H>>>Переименуйте файл на время работы .
K>>И чем это спасёт от записи чем-то другим в уже переименованый файл?
H>А откуда это что-то что может записать в наш файл узнает его новое имя?

$ find . -type f -exec sh -c 'echo Hello >> {}' \;


Что там было про первого залётного дятла и цивилизацию? 8))
Re: Запретить изменение и удаление файла. Linux
От: Аноним  
Дата: 10.04.07 14:24
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

удалить никто не сможет, пока у вас есть открытый дескриптор.
Re[2]: Запретить изменение и удаление файла. Linux
От: Kemm  
Дата: 10.04.07 14:26
Оценка:
Здравствуйте, Аноним, Вы писали:

S_K>>Моя программа открывает файл и записывает в него данные.

S_K>>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.
А>удалить никто не сможет, пока у вас есть открытый дескриптор.

Это смотря что требуется. Если временный файл — то его и самому можно удалить сразу после открытия, если нужно, чтобы данные в файле смог ещё кто-нибудь увидеть — то оппаньки, после того, как кол-во ссылок на этот файл в FS будет равно 0, увидеть его уже никто не сможет, а после close(2) он и физически удалится.
Re: Запретить изменение и удаление файла. Linux
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 13.04.07 00:29
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

В POSIX нет mandatory lock-ов — только advisory.
Однако в конкретных его реализациях и конкретных файловых системах есть.

Например из man mount(об опциях) из Ubuntu 6.10
mand Allow mandatory locks on this filesystem. See fcntl(2).
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re: Запретить изменение и удаление файла. Linux
От: Adekameron  
Дата: 15.04.07 18:19
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.


Я вижу вариант только со стик битами (липкий стик) но в случае если другой процеес от того же пользователя — это непрокатит
Re: Запретить изменение и удаление файла. Linux
От: sndralex Израиль www.gdetotam.co.il
Дата: 16.04.07 09:18
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

может поиграться с SELinux?
Alexander N. Treyner
Re[2]: Запретить изменение и удаление файла. Linux
От: djs_ Россия  
Дата: 19.04.07 06:18
Оценка:
Здравствуйте, TheBeard, Вы писали:

TB>Надо поставить файлу соответствующие права доступа (0600). Это, правда, от root'а не спасет. Если файл создается при открытии, права можно указать в вызове open() (см. в документации константы S_*)


От удаления не спасет.
--
Спасибо
Re: Запретить изменение и удаление файла. Linux
От: djs_ Россия  
Дата: 19.04.07 06:23
Оценка:
Здравствуйте, Sandro_K, Вы писали:

S_K>Моя программа открывает файл и записывает в него данные.

S_K>Можно ли сделать так, чтобы пока файл открыт моей программой пользователь (или другой процесс) не мог ни удалить ни изменить файл.

А там нет chflags ?
--
Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.