Монтирование думало устройство закольцовывания с offset
, могло бы быть полезным.
VDIfile=VirtData.vdi
mountingpoint=/mnt/VDI
offData=$( VBoxManage internalcommands dumphdinfo "$VDIfile" |grep offData | sed 's:.*offData=\([0-9]*\).*:\1:' )
offset=$(( $offData + 32256 ))
mount -t ext4 -o rw,noatime,noexec,loop,offset="$offset" "$VDIfile" "$mountingpoint"
Больше деталей здесь: https://unix.stackexchange.com/a/45019/9689
В Unix, большинство объектов, которые вы можете прочитать и писать - обычные файлы, трубы, клеммы, необработанные диски - все это сделано для напоминания файлов Отказ
Программа, такая как CAT
, читает из его стандартного ввода, такого как это:
n = read(0, buffer, 512);
, который просит 512 байтов. N
- это количество байтов фактически читает или -1, если есть ошибка.
Если вы сделали это неоднократно с обычным файлом, вы получите кучу 512-байтовых чтений, то несколько короче читается на хвостовом конце файла, то 0, если вы пытались прочитать мимо конца файл. Так, CAT
будет работать до n
n n не является <= 0.
Чтение от клемма немного отличается. После того, как вы введете в строку, расторженном в введите клавишу , READ
возвращает только эту строку.
Есть несколько специальных символов, которые вы можете ввести. Один - Ctrl-D . Когда вы вводите это, операционная система отправляет всю текущую строку, которую вы набрали (но не в Ctrl-D сама) к программе, выполняющей чтение. И вот середина: если Ctrl-D является первым символом в строке, программа отправляется строка длины 0 - так же, как программа увидит, будет ли она до конца обычного файл. CAT
Не нужно ничего делать по-другому , будь то чтение из обычного файла или терминала.
Другой специфический характер Ctrl-Z . Когда вы вводите его, в любом месте в строке операционная система отбрасывает все, что вы набрали до этой точки, и отправляет сигнал SIGTSTP в программу, которая обычно останавливается (паузы) и возвращает управление в оболочку.
Так что в вашем примере
$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+ Stopped cat > file.txt
вы набрали некоторые символы, которые были отброшены, то CAT
был остановлен, не написав ничего до его выходного файла.
$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+ Stopped cat > file.txt
Вы напечатали в одной строке, который Cat
прочитал и написал в свой выходной файл, а затем Ctrl-Z остановлен CAT
.
Поэтому Ctrl + D являются взломом.
В глубине души, Ctrl + D (несмотря на то, чтобы быть названным символ eof
) на самом деле не означает конец файла: это означает, “отправляют вход ожидания в приложение теперь”. Это на самом деле близко к значению Ctrl + M ( eol
), который отправляет вход ожидания плюс новая строка.
, Когда вы нажимаете Ctrl + D сразу после Ctrl + M (т.е. в начале строки) или после другого Ctrl + D, вход ожидания пуст. Таким образом приложение получает 0 байтов входа. В читает
, вызов, читая 0 байтов сигнализирует о конце файла.
, Когда вы нажимаете Ctrl + Z,ожидающий ввод отбрасывается. Таким образом, обрабатывается только то, что уже было отправлено в приложение ( cat
) путем ввода новой строки или Ctrl + D перед нажатием Ctrl + Z .