Открываем файл,
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
Открываем файл,
пишем туда, с дргой сессии етот файл удаляем. Программа продолжает писать туда.
Как выловить что файла нет? Солярка.
Как выловить что файла нет? Солярка.
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
Re: Открываем файл,
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
-
- Уже с Приветом
- Posts: 569
- Joined: 14 Dec 2003 04:06
- Location: Львов->Киев->Торонто
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
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 - никаких ерроров, удаляется без шума и пыли. Как его локать, чтоб еррор получил?
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
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
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
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 и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
f_evgeny wrote:A. Fig Lee wrote:
Хммм.. Читал.
Нельзя ли выдать точную последовательность действий chmod и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.
Фиг ли, не могли бы Вы поконкретнее объяснить, что Вам надо? Может тогода и решение найдется.
Мне надо или чтоб "rm" фаилед на открытом на запись файлe или чтоб программа которая пишет в файл получила нотифицацию после того как файл "rm-ed".
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
A. Fig Lee wrote:f_evgeny wrote:A. Fig Lee wrote:
Хммм.. Читал.
Нельзя ли выдать точную последовательность действий chmod и какой лок используется?
Да, Вы сами пробовали проделать? Тогда хотелось бы последовательность действий.
Фиг ли, не могли бы Вы поконкретнее объяснить, что Вам надо? Может тогода и решение найдется.
Мне надо или чтоб "rm" фаилед на открытом на запись файлe или чтоб программа которая пишет в файл получила нотифицацию после того как файл "rm-ed".
1. - Думаю, нельзя (и хорошо)
2. - Думаю можно проверить из программы
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
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
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
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
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
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"?
Единственно приходит в голову - периодически чекать директори ентри.
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
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
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
A. Fig Lee wrote:f_evgeny wrote:2. - Думаю можно проверить из программы
Как?
Файл постоянно открыт и периодически туда пишется инфо.
Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..
Ну да, только так, можно читать директорию, можно пробовать открыть файл из другого процесса. Но я такого не делал, это то, что приходит мне в голову.
Да, кстати, если информация пишется периодически, можно так же периодически его закрывать/открывать.
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
A. Fig Lee wrote:f_evgeny wrote:2. - Думаю можно проверить из программы
Как?
Файл постоянно открыт и периодически туда пишется инфо.
Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..
Может просто следит за указателем позиции в фаиле?
А если фаил открыть как "for append" он разве не вернет ошибку при попытке записи в несуществующий уже фаил?
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
Плавали-Знаем! (C)
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
-
- Уже с Приветом
- Posts: 10367
- Joined: 12 Apr 2001 09:01
- Location: Lithuania/UK
VladDod wrote:A. Fig Lee wrote:f_evgeny wrote:2. - Думаю можно проверить из программы
Как?
Файл постоянно открыт и периодически туда пишется инфо.
Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..
Может просто следит за указателем позиции в фаиле?
А если фаил открыть как "for append" он разве не вернет ошибку при попытке записи в несуществующий уже фаил?
Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
f_evgeny wrote:Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!
Аха ... проверил уже. Ну для "реал-тайм" полезно таки держать файлы закрытыми основное время. (почему, вероятно, и не сталкивался с такой проблемой).
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
Плавали-Знаем! (C)
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
VladDod wrote:Аха ... проверил уже. Ну для "реал-тайм" полезно таки держать файлы закрытыми основное время. (почему, вероятно, и не сталкивался с такой проблемой).
какой же ето реалтайм? Если порядка 100 записей в секунду. 100 раз открывать-закрывать?
Как бы директори ентри локнуть чтоб нельзя тида писать было. Нет ли такой файл систем?
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
f_evgeny wrote:Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!
А в чём причина, почему это так однозначно правильно?
P.S. Отдельный вопрос-подколка - а почему Вы специально выбираете фразеологию Съездов КПСС?
Cheers
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA