echo -n > file, cat /dev/null > file
как воспроизвести?
Red Hat Linux release 6.2 (Zoot)
Linux qqq 2.2.24-6.2.3 Fri Mar 14 08:57:46 EST 2003 i686 unknown
Вот что делает эта несчастная программа с файлом:
open O_RDWR);
lseek 0L, SEEK_END);
потом туда пишется только writeом
Пока она работает, я хочу файл обнулить. Команды из сабжа не работают.
Linux qqq 2.2.24-6.2.3 Fri Mar 14 08:57:46 EST 2003 i686 unknown
Вот что делает эта несчастная программа с файлом:
open O_RDWR);
lseek 0L, SEEK_END);
потом туда пишется только writeом
Пока она работает, я хочу файл обнулить. Команды из сабжа не работают.
Эта программа llseek только один раз делает, в начале? А что ты тогда хотел?
Правильно использовать O_APPEND .
Правильно использовать O_APPEND .
Эта программа llseek только один раз делает, в начале? А что ты тогда хотел?По херу что она вызывает. "echo -n > file" всегда должно обнулять файл независимо от того, что с ним делает какая-то другая программа.
оно и обнуляет
а программа следующим write опять туда записывает
а как, по-твоему, должно быть?
а программа следующим write опять туда записывает

а как, по-твоему, должно быть?
Я не верю, что она записывает точно такой же объем как и раньше да еще и более 300 Мб за то мгновение, что я набираю "ls -l".
а с чего ты взял, что объём такой же?
P.S. может ты не знаешь про дыры? ну тогда lol
P.S. может ты не знаешь про дыры? ну тогда lol
С того, что я делаю 'ls -l', вижу цифру. Делаю 'echo -n>file'. Делаю 'ls -l', вижу цифру. Они одинаковые.
По-твоему, файл с дырой не должен обнуляться по 'echo -n >file'? тогда lol.
По-твоему, файл с дырой не должен обнуляться по 'echo -n >file'? тогда lol.
при обнулении не меняется позиция в файле у программы, которая туда пишет,
и следующий write создаёт дыру, с начала файла, и до этой позиции
и следующий write создаёт дыру, с начала файла, и до этой позиции
О! Спасибо за объяснение. Но вообще эта фича граничит с багом. Причем во всех ufs...
А какое поведение было бы не багом?
Сбивать позицию для всех программ, которые открыли файл? Ничуть не лучше.
Для того, что ты хочешь, придуман O_APPEND.
Сбивать позицию для всех программ, которые открыли файл? Ничуть не лучше.
Для того, что ты хочешь, придуман O_APPEND.
Сбивать позицию для всех программ, которые открыли файл? Ничуть не лучше.Может и лучше. Так получается неявное создание файла с дырой.
Я знаю про O_APPEND, но эта мегапрограмма не моя, к счастью.
Оставить комментарий
sergey_m
Почему сабж не обнуляет файл если он открыт какой-то программой? Речь идет конечно о Линуксе.