LINUX.ORG.RU

Открытие файла двумя процессами, O_APPEND


0

0

Задавали мне как то вопрос: Есть два процесса, которые открывают один файл, причем один из процессов открыл файл с флагом O_APPEND. Какая особенность работы будет тут? Мне в голову пришло только, что все процессы будут писать в конец, но у каждого процесса ведь своя таблица состояния файла, поэтому такого быть не должно. Так какой ответ?

Ответ на: комментарий от placement_new

Да пробовал я, и маны читал - не вижу ни какой особенности. Все равботает как ожидается.


Хочешь сказать, что записуемые данные не накладываются друг на друга?!

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

Накладываются, но это вполне логичное поведение - у каждого процесса свой указатель, свои флаги. Вполне ожидаемое поведение.

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

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

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

сорри, щас занят, на выходных проверю. Заодно fsync запихну.

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

> Ну примерно так

if(fork()) { int fd = open(«1.txt», O_APPEND | O_RDWR); write(fd, «345», 3); }

else { int fd = open(«1.txt», O_RDWR); write(fd, «2», 1); }

Бугага. А точно надо открыть один файл с O_APPEND, а второй - без?

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

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

Какие подозрения, обычный вопрос.

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

> мм, где я мог жестко тупить? :)

Зачем тебе такая странная комбинация флагов? Либо делается O_APPEND либо в обоих процессах, либо ни в одном.

Или ты из любопытства спросил?

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

Да не, не из любопытсва. Спросили просто такой вопрос на собеседовании.

То, что писали вверху про наложение данных проблема не O_APPEND, такая же фигня ведь будет и просто с O_RDWR, ибо текущая позиция у каждого своя.

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

То, что писали вверху про наложение данных проблема не O_APPEND,


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

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

Хочешь сказать тут наложение не может быть?

if(fork())
{
int fd = open(«1.txt», O_RDWR);
write(fd, «3», 1);
write(fd, «4», 1);
write(fd, «5», 1);
}
else
{
int fd = open(«1.txt», O_RDWR);
write(fd, «2», 1);
}

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

> То, что писали вверху про наложение данных проблема не O_APPEND

Конечно. Это проблема с отсуствием O_APPEND в одном из процессов.

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

Тебе же сказали.
Самое примитивное и простое решение для синхронизации при записи, использовать флаг O_APPEND во всех процессах которые его открывают.

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

> Конечно. Это проблема с отсуствием O_APPEND в одном из процессов.

Теперь понял. Спасибо.

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