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

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: 56205
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. - Думаю можно проверить из программы

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

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