LINUX.ORG.RU
ФорумTalks

замена файла в винде.


0

2

Как известно, в оффтопике нельзя переписать открытый файл. Документированный воркэраунд просто фееричен. Отсюда и следуют все эти «для завершения утановки необходимо перезапустить компьютер».

Итак:

Если системный файл, который установщик пытается заменить, занят, то установщик перезаписывает его с опцией MOVEFILE_DELAY_UNTIL_REBOOT — чтобы занятый файл заменился при перезагрузке системы:

// Код упрощен для ясности MoveFileEx(«sysfile.new», «sysfile.dll», MOVEFILE_DELAY_UNTIL_REBOOT); CopyFile(«D:\\CDROM\\INSTALL\\sysfile.dll», «sysfile.new»);

---------------

Я плакалъ.

★★☆☆☆
Ответ на: комментарий от TGZ

>echo 123>1.avi

Ну и естественно почувствуй разницу между

echo 123>1.avi и echo 123 >1.avi

хинт: перенаправление потоков. echo 123>1.avi обозначает перенаправить вывод программы echo, дескриптора 123 в 1.avi

А echo 123 >1.avi означает - вывести stdout в 1.avi

echo 123 1>1.avi означает тоже самое, так как номер дескриптора 1 отвечает stdout. 0 - stdin, 2 - stderr

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

Интересно, а что будет если место на разделе, на котором лежит старая версия файла, вдруг понадобится? Например из-за нехватки свободного места на разделе.

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

>Интересно, а что будет если место на разделе, на котором лежит старая версия файла, вдруг понадобится? Например из-за нехватки свободного места на разделе.

ENOSPC

Пока inode не помечен как свободный, место не освобождается.

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

запустить mplayer в фоне не так-то и тривиально.


А какие сложности? Что «&» не прокатит для фона?
Обязательно ли должен быть в фоне? Мне влом опять запускать WMPlayer и проверять.

TGZ ★★★★
()

Видел это среди срача по поводу унылой организации файловых систем в оффтопе. Лень гуглить полный текст, но там есть и более эпические перлы.

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

На счет десрипторов перенаправления потоков и так все понятно:

0-stdin
1-stdout
2-stderr

но 3 ведь не создан. Поэтому echo 123>1.txt (1>1.txt echo 123) (echo 123 1>1.txt) равнозначно. Вот если бы 1>&3, тогда понятно.

TGZ ★★★★
()

Кстати не совсем так. Например в FAR'e спокойно перезаписывается и отображается в реальном времени открытый на чтение файл, а открытый на редактирование спрашивает сохранить.

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

> Под linux труд инвалидов не оплачивается и это сильно сказывается на их численности.

Ой, ну я вас умоляю. Вспомнить хотя бы все те кривые драйвера, которые многие вынуждены использовать

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

И оба процесса будут весело продолжать играть каждый свое.

А что будет, если мы удаляем открытый файл (большой), потом пишем на диск новый файл, а всего свободного места на диске хватает только на один из двух?

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

Процесс, пишущий новый файл, упадет с криками «No space left on device».

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от TGZ

>Поэтому echo 123>1.txt (1>1.txt echo 123) (echo 123 1>1.txt) равнозначно.

4.2

раз поток 123 не создан, то ничего в 1.txt и не будет.

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

раз поток 123 не создан, то ничего в 1.txt и не будет.


Я делаю `echo 123 >1.txt; cat 1.txt` и эти «123» выводятся в консоль. Каким здесь боком 123 в качестве нового потока? Что недостаточно стадартного stdout «1>»?

Да хоть `echo йцукен >123; cat 123`. Расслабьтесь что-ли по стаканищу под «Дружбу». Как раз и все 123 потока обсудите.

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

>Я делаю `echo 123 >1.txt; cat 1.txt` и эти «123» выводятся в консоль. Каким здесь боком 123 в качестве нового потока? Что недостаточно стадартного stdout «1>»?

Ты не отличаешь echo 123>1.txt от echo 123 >1.txt?

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

Это просто небрежность при набивании поста.

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