Открываем файл,
-
- Уже с Приветом
- 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: 56205
- 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: английская колония