Открываем файл,

User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Открываем файл,

Post by A. Fig Lee »

пишем туда, с дргой сессии етот файл удаляем. Программа продолжает писать туда.
Как выловить что файла нет? Солярка.
Верить нельзя никому - даже себе. Мне - можно!
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Re: Открываем файл,

Post by vc »

A. Fig Lee wrote:пишем туда, с дргой сессии етот файл удаляем. Программа продолжает писать туда.
Как выловить что файла нет? Солярка.


In Unix, when a file is deleted, only a directory entry is removed. The file is removed (the sapce is reclaimed by OS) when
o the link count reaches zero (number of directory entries)
o no program has the file open.

So the answer is, no, there is no way to detect, from inside the running process, whether the directory entry for the open file was removed or not.

VC
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

Да, поддерживаю. Когда файл открывается программой счетчик инкрементируется и физически файл будет удален только кода программа закроет файл и счетчик упадет до нуля.
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Есть ли какие файл систем, на которые можно было бы наложить лок?
2. Каким образом можно получить "text file busy" - открытие файла на запись уже открытого на запись?
Верить нельзя никому - даже себе. Мне - можно!
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Post by vc »

A. Fig Lee wrote:Есть ли какие файл систем, на которые можно было бы наложить лок?
2. Каким образом можно получить "text file busy" - открытие файла на запись уже открытого на запись?


1. You cannot lock a directory entry.

2. You will get this error when a file is locked, not a directory entry.

VC
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Post by VladDod »

oops
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

vc wrote:
A. Fig Lee wrote:Есть ли какие файл систем, на которые можно было бы наложить лок?
2. Каким образом можно получить "text file busy" - открытие файла на запись уже открытого на запись?


1. You cannot lock a directory entry.

2. You will get this error when a file is locked, not a directory entry.

VC


Директори меня мало интересует. Файл локед с fcntl - никаких ерроров, удаляется без шума и пыли. Как его локать, чтоб еррор получил?
Верить нельзя никому - даже себе. Мне - можно!
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Post by vc »

A. Fig Lee wrote:
vc wrote:
A. Fig Lee wrote:Есть ли какие файл систем, на которые можно было бы наложить лок?
2. Каким образом можно получить "text file busy" - открытие файла на запись уже открытого на запись?


1. You cannot lock a directory entry.

2. You will get this error when a file is locked, not a directory entry.

VC


Директори меня мало интересует. Файл локед с fcntl - никаких ерроров, удаляется без шума и пыли. Как его локать, чтоб еррор получил?


That's because Unix, by default, uses advisory locking. Since the 'rm' command does not check for locking, the fact that the file has already been locked is ignored. You can enable mandatory locking using the permissions mode of a file (see the 'chmod' man pages for details).

Not criticising, just being curious. You're asking pretty elementary questions on Unix programming. Why don't you read a book like Stevens's Advanced Unix Programming. It's chokeful of, like, really cool stuff.

VC
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

vc wrote:That's because Unix, by default, uses advisory locking. Since the 'rm' command does not check for locking, the fact that the file has already been locked is ignored. You can enable mandatory locking using the permissions mode of a file (see the 'chmod' man pages for details).

Not criticising, just being curious. You're asking pretty elementary questions on Unix programming. Why don't you read a book like Stevens's Advanced Unix Programming. It's chokeful of, like, really cool stuff.

VC


Хммм.. Читал.
Нельзя ли выдать точную последовательность действий chmod и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

A. Fig Lee wrote:
Хммм.. Читал.
Нельзя ли выдать точную последовательность действий chmod и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.

Фиг ли, не могли бы Вы поконкретнее объяснить, что Вам надо? Может тогода и решение найдется.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

f_evgeny wrote:
A. Fig Lee wrote:
Хммм.. Читал.
Нельзя ли выдать точную последовательность действий chmod и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.

Фиг ли, не могли бы Вы поконкретнее объяснить, что Вам надо? Может тогода и решение найдется.


Мне надо или чтоб "rm" фаилед на открытом на запись файлe или чтоб программа которая пишет в файл получила нотифицацию после того как файл "rm-ed".
Верить нельзя никому - даже себе. Мне - можно!
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

A. Fig Lee wrote:
f_evgeny wrote:
A. Fig Lee wrote:
Хммм.. Читал.
Нельзя ли выдать точную последовательность действий chmod и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.

Фиг ли, не могли бы Вы поконкретнее объяснить, что Вам надо? Может тогода и решение найдется.


Мне надо или чтоб "rm" фаилед на открытом на запись файлe или чтоб программа которая пишет в файл получила нотифицацию после того как файл "rm-ed".

1. - Думаю, нельзя (и хорошо)
2. - Думаю можно проверить из программы
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Post by vc »

A. Fig Lee wrote:
vc wrote:That's because Unix, by default, uses advisory locking. Since the 'rm' command does not check for locking, the fact that the file has already been locked is ignored. You can enable mandatory locking using the permissions mode of a file (see the 'chmod' man pages for details).

Not criticising, just being curious. You're asking pretty elementary questions on Unix programming. Why don't you read a book like Stevens's Advanced Unix Programming. It's chokeful of, like, really cool stuff.

VC


Хммм.. Читал.
Нельзя ли выдать точную последовательность действий chmod и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.


Code: Select all

cat a.c

#include <unistd.h>
#include <fcntl.h>
#include <errno.h>

int main() {
  int fd;
  fd = open("a.dat", O_RDWR);
  if (errno > 0) {printf("Could not open: %d\n", errno); exit(1);}
  lockf(fd, F_TLOCK, 0);
  if (errno > 0) {printf("Could not lock: %d\n", errno); exit(2);}
  sleep(100);
}

oracle@staging1>gcc -o a a.c
oracle@staging1>ls -l > a.dat
oracle@staging1>ls -l a.dat
-rw-r--r--   1 oracle   dba          504 May  9 12:21 a.dat
oracle@staging1>chmod 2644 a.dat
oracle@staging1>ls -l a.dat
-rw-r-lr--   1 oracle   dba          504 May  9 12:21 a.dat
oracle@staging1>./a &
[1] 9286
oracle@staging1>cp a a.dat
cp: cannot create a.dat: Resource temporarily unavailable
oracle@staging1>


VC
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Post by vc »

A. Fig Lee wrote:
f_evgeny wrote:
A. Fig Lee wrote:
Хммм.. Читал.
Нельзя ли выдать точную последовательность действий chmod и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.

Фиг ли, не могли бы Вы поконкретнее объяснить, что Вам надо? Может тогода и решение найдется.


Мне надо или чтоб "rm" фаилед на открытом на запись файлe или чтоб программа которая пишет в файл получила нотифицацию после того как файл "rm-ed".


'rm' does not open the file, 'rm' removes a directory entry, a directory entry cannot be locked, 'rm' cannot be prevented from happenning. I thought we've been through this...

Locking can only prevent a file from being overwritten as I showed in my example.

VC
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

f_evgeny wrote:2. - Думаю можно проверить из программы

Как?
Файл постоянно открыт и периодически туда пишется инфо.
Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

vc wrote:'rm' does not open the file, 'rm' removes a directory entry, a directory entry cannot be locked, 'rm' cannot be prevented from happenning. I thought we've been through this...

Locking can only prevent a file from being overwritten as I showed in my example.

VC

Прекрасно. Вернемся к оригинальному вопросу - как выловить что файл был "rm-ed"?
Единственно приходит в голову - периодически чекать директори ентри.
Верить нельзя никому - даже себе. Мне - можно!
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Post by vc »

A. Fig Lee wrote:
vc wrote:'rm' does not open the file, 'rm' removes a directory entry, a directory entry cannot be locked, 'rm' cannot be prevented from happenning. I thought we've been through this...

Locking can only prevent a file from being overwritten as I showed in my example.

VC

Прекрасно. Вернемся к оригинальному вопросу - как выловить что файл был "rm-ed"?
Единственно приходит в голову - периодически чекать директори ентри.


Not bad. You can even restore it if need be...

VC
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

A. Fig Lee wrote:
f_evgeny wrote:2. - Думаю можно проверить из программы

Как?
Файл постоянно открыт и периодически туда пишется инфо.
Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..

Ну да, только так, можно читать директорию, можно пробовать открыть файл из другого процесса. Но я такого не делал, это то, что приходит мне в голову.
Да, кстати, если информация пишется периодически, можно так же периодически его закрывать/открывать.
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Post by VladDod »

A. Fig Lee wrote:
f_evgeny wrote:2. - Думаю можно проверить из программы

Как?
Файл постоянно открыт и периодически туда пишется инфо.
Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..

Может просто следит за указателем позиции в фаиле?
А если фаил открыть как "for append" он разве не вернет ошибку при попытке записи в несуществующий уже фаил?
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Post by VladDod »

Нда ... фигня получается. :pain1: Надо закрывать-открывать файл.
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

VladDod wrote:
A. Fig Lee wrote:
f_evgeny wrote:2. - Думаю можно проверить из программы

Как?
Файл постоянно открыт и периодически туда пишется инфо.
Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..

Может просто следит за указателем позиции в фаиле?
А если фаил открыть как "for append" он разве не вернет ошибку при попытке записи в несуществующий уже фаил?

Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!
User avatar
VladDod
Уже с Приветом
Posts: 56113
Joined: 06 May 2001 09:01

Post by VladDod »

f_evgeny wrote:Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!

Аха ... проверил уже. Ну для "реал-тайм" полезно таки держать файлы закрытыми основное время. (почему, вероятно, и не сталкивался с такой проблемой).
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

VladDod wrote:Аха ... проверил уже. Ну для "реал-тайм" полезно таки держать файлы закрытыми основное время. (почему, вероятно, и не сталкивался с такой проблемой).

какой же ето реалтайм? Если порядка 100 записей в секунду. 100 раз открывать-закрывать?

Как бы директори ентри локнуть чтоб нельзя тида писать было. Нет ли такой файл систем?
Верить нельзя никому - даже себе. Мне - можно!
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

f_evgeny wrote:Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!

А в чём причина, почему это так однозначно правильно?

P.S. Отдельный вопрос-подколка - а почему Вы специально выбираете фразеологию Съездов КПСС? :)
Cheers
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

A. Fig Lee wrote:Как бы директори ентри локнуть чтоб нельзя тида писать было. Нет ли такой файл систем?

А в чём состоит исходная задача решение которой упёрлось в базовые принципы операционной системы? Может её как-то иначе можно решать - без смены файловых систем?
Cheers

Return to “Вопросы и новости IT”