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