URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9698
[ Назад ]

Исходное сообщение
"Shell"

Отправлено ZeND , 23-Июн-13 13:52 
Здравствуйте !
Подскажите, как добавить несколько символов в начало файла не меняя размер самого файла, те чтобы данные перезаписывали начало файла.

Содержание

Сообщения в этом обсуждении
"Shell"
Отправлено XAnder , 24-Июн-13 08:22 
> Подскажите, как добавить несколько символов в начало файла не меняя размер самого
> файла, те чтобы данные перезаписывали начало файла.

Например, так:

$ echo 0123456789 > test
$ echo -n 'abc' | dd of=test conv=notrunc
0+1 записей считано
0+1 записей написано
скопировано 3 байта (3 B), 0,0145526 c, 0,2 kB/c
$ cat test
abc3456789
$ _


"Shell"
Отправлено allez , 21-Июл-13 10:06 
>[оверквотинг удален]
>> файла, те чтобы данные перезаписывали начало файла.
> Например, так:
> $ echo 0123456789 > test
> $ echo -n 'abc' | dd of=test conv=notrunc
> 0+1 записей считано
> 0+1 записей написано
>  скопировано 3 байта (3 B), 0,0145526 c, 0,2 kB/c
> $ cat test
> abc3456789
> $ _

Прошу прощения за некоторую некротичность моего поста. :-)
Хочу только добавить, что юникод, в частности - UTF-8, может при определенных условиях
доставить неприятности. Например, при использовании символов, выходящих за пределы первой
половины таблицы ASCII, получим следующее:


$ echo "0123456789" > test
$ echo -n 'абв' | dd of=test conv=notrunc
0+1 записей считано
0+1 записей написано
скопировано 6 байт (6 B), 6,288e-05 c, 95,4 kB/c
$ cat test
абв6789

Размер файла остается прежним, а вот количество символов в нем меняется. Но если этот
момент не критичен, то его можно игнорировать. :-)

"Shell"
Отправлено XAnder , 22-Июл-13 10:00 
> Хочу только добавить, что юникод, в частности - UTF-8, может при определенных условиях доставить неприятности...

Кстати, да. Это вы точно заметили. При использовании кодировок с нефиксированным размером символа (UTF-8 как пример) задача в общем случае не решается. Это если конечно понимать её формулировку, как "заменить первые символы файла заданными символами, не меняя размер файла". Строка замены может иметь, к примеру, 5 байт (не символов), а файл может начинаться с трёх двухбайтовых символов. Тогда "тупая" замена испортит третий символ файла, а "умная" - изменит размер файла.

Хотя тоже думаю, что вопрошающему это не критично.