O caractere de lixo “^ @” mostra usando o vim, mas usando cat ele mostra dados apropriados

0

Estou tentando copiar os dados x.file para o volume virtual de 32 KB e tentar ler novamente 32 KB do mesmo volume para y.file. Ele mostra a saída esperada ao usar o cat y.file, mas sempre que estou usando o vim / vi para ver o conteúdo, ele mostra o caractere acrescentado "^ @".

Comando para gravar dados no volume virtual.

dd if=/tmp/x.file of=/dev/vv/<vv_id> seek=0 bs=16K count=2

Comando para ler os dados do volume virtual.

dd of=/tmp/y.file if=/dev/vv/<vv_id> seek=0 bs=16K count=2

x.file contém séries de padrões e tamanhos de 24 KB.
Por exemplo:

se x.file PATTERN PATTERN PATTERN

depois y.file PATTERN PATTERN PATTERN^@^@^@^@

EDIT:

Now, I know what was the reason of showing "^@" character. My input file size was less than 32 KB. But still have doubt why "^@" gets filled as it could be any other value ? Any specific reason ?

    
por Rocoder 02.04.2018 / 14:02

1 resposta

1

comentários , é claro que o arquivo x.file é menor que 32768 bytes (32 KiB). Isso significa que quando dd for solicitado a escrever 32 KiB para /dev/vv/<vv_id> , ele não poderá copiar tudo do arquivo e o último bit do KiB 32 permanecerá não escrito.

Esses dados não inicializados serão então copiados para y.file com a segunda operação dd , e é isso que você vê quando abre esse arquivo em um editor.

O ^@ é a maneira do editor de mostrar um byte nulo. Ao ler o manual dd , não está claro se isso é o que está escrito no dispositivo pelo primeiro dd ou se são dados indesejados que já estavam presentes no dispositivo antes da primeira invocação dd .

    
por 03.04.2018 / 08:29