LINUX.ORG.RU

странное поведение...


0

0

одним процессом пишу в файл (просто последовательно добавляю байтики в него), в течении какого-то продолжительного времени, пока запись идет открываю терминал и делаю в этот файл
$ cat /dev/null > file
ни сообщения об ошибки, ни обнуления файла не происходит. как-то это странно. Или я чего-то недопонял?

★★★★★

/dev/null это не устройство для чтения а для записи в него может надо /dev/zero а так только файлик создаеться и тутже закрываеться.

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

блин. что за бред. /dev/null open'ом открывается. но при чтении всегда возвращает EOF сразу. Проблема не в нем. Проблема в том, что cat открыл файл O_WRONLY и по идее должен бы его обнулить, но этого не происходит, а раз этого не происходит, то может быть должна получиться ошибка? Но ошибка тоже не происходит. Вопрос в том, почему нет ошибки, ведь если ее нет - значит операция должна была пройти успешно? Но она не прошла успешно. То есть поведение в любом случае не верное.

PS: Попробуй сделать
$ echo "AA" > file
$ ls -l file
$ cat /dev/null > file
и попробуй понять почему так получилось (hint! /dev/null тут не при чем, с тем же успехом я мог бы указать любой другой файл) после этого попробуй сделать
$ cat /dev/zero > file
и попробуй понять что произойдет...

eXOR ★★★★★
() автор топика

>обнуления файла не происходит

IMO это означает, что файл в пишущей программе открыт без O_APPEND. В этом случае процесс пишет в текущую позицию - которая уже м.б. далеко. Правда файл должен получиться "дырявым" - и реально занимать меньше места.

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

> Проблема в том, что cat открыл файл O_WRONLY и по идее должен бы его обнулить, но этого не происходит, а раз этого не происходит, то может быть должна получиться ошибка?

Во-первых, файл открывал не cat, а шелл. Во-вторых, с какой стати его обнулять? Файл изменится, только если в него написать. Так как cat получает EOF сразу, он ничего и не пишет.

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

> Файл изменится, только если в него написать.

фигня

anonymous
()
Ответ на: комментарий от vnp

Открывает его cat, а шелл только связывает cat'овский stdout с файлом. Сует дугой дескриптор.

PS: Ну я так понимаю ответ мне на этот вопрос получить не светит ;).

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

кстати, все прекрасно обнуляется

(pts/3)~ $> echo test > qwert
(pts/3)~ $> cat qwert
test
(pts/3)~ $> ll qwert
-rw-r--r--  1 victor root 5 2004-11-19 16:46 qwert
(pts/3)~ $> cat /dev/null > qwert
(pts/3)~ $> ll qwert             
-rw-r--r--  1 victor root 0 2004-11-19 16:46 qwert
(pts/3)~ $> cat qwert
(pts/3)~ $> 

так что дело явно в чем-то другом

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

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

что говорит echo $? после cat-а ?

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

> Открывает его cat, а шелл только связывает cat'овский stdout с файлом.

Сам-то понял чего сказал? :)) _Шелл_ открывает файл и связывает cat'овский stdout с файлом. А cat'у уже пофиг.

> Ну я так понимаю ответ мне на этот вопрос получить не светит

Правильный ответ - у DonkeyHot'а.

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

Похоже и правда он прав. ;).

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