LINUX.ORG.RU
Ответ на: комментарий от panter_dsd

Каша в чем ? если за 1 итерацию добавляется 1 строчка - то каша на уровне строк или на уровне символов ?

Jopich
() автор топика
Ответ на: комментарий от panter_dsd
  • Первый процесс открыл файл и установил позицию в конец
  • Второй процесс открыл файл и установил позицию в конец
  • Первый записал строку
  • Второй записал строку, перетерев строку от предыдущего процесса.
panter_dsd ★★★★
()
Ответ на: комментарий от panter_dsd

Только ради тебя в ман слазил:

If the O_APPEND flag of the file status flags is set, the file offset shall be set to the end of the file prior to each write and no intervening file modification operation shall occur between changing the file offset and the write operation.

http://pubs.opengroup.org/onlinepubs/009695399/functions/write.html

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

Но если программа использует промежуточную буфферизацию, вроде libc stdio, а не вызывает write() напрямую, то каша таки может получиться.

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

Атомарность записей тем не менее никак не гарантируется, поэтому без блокировок всё равно получаем кашу. Да, обязательно нужно лочить.

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

посмотрел модули блокировки для python почти все они делают временный файлик и на основе его смотрят лок. Т е если программа прервется то лок файл останется. Единственная альтернатива использовать fcntl. Почему сделано так по тупому ?

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

посмотрел модули блокировки для python почти все они делают временный файлик и на основе его смотрят лок. Т е если программа прервется то лок файл останется. Единственная альтернатива использовать fcntl. Почему сделано так по тупому ?

Питон, что с них взять. Правильный способ, естественно, использовать flock/fcntl.

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

Это никогда не работало, потому что освободившийся PID может занять другой процесс. Используйте нормальные механизсы ipc, а не костыли.

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

Атомарность записей тем не менее никак не гарантируется, поэтому без блокировок всё равно получаем кашу. Да, обязательно нужно лочить.

Почему это? Если нам только нужно чтобы строки не разбивались, то, как я понимаю это указание, всё должно работать.

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

По тупому? Есть разные способы блокировки. Те что создают файлик, это между процессами (хотя можно и иначе, но речь о другом). Между тредами есть менее суровые способы блокировки, а между хостами — более суровые. У тебя есть общий ресурс доступ к которому нужно лочить. Этот ресурс есть файл, и файл можно LOCK_EX. То что ты называешь «альтернативой» на самом деле является самым подходящим вариантом.

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

Ах да, правильно. Ох уж мне эти сисколлы, сорвавшиеся на полпути...

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

Я готов зуб дать, что читал об этом в апуе, и вот: http://stackoverflow.com/a/35256561

Как это объяснить? Второй абзац.

ps. Хотя разные источники наоборот говорят, что очень не все фс соответствуют посиксу в этом плане. Ладно, неровностей в люниксе хватает, еще одна погоды не сделает.

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

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

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.