Ctrl+D для конечной терминальной строки вводится

Монтирование думало устройство закольцовывания с 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

21
24.05.2016, 16:00
2 ответа

В 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 .

30
27.01.2020, 19:43

Поэтому Ctrl + D являются взломом.

В глубине души, Ctrl + D (несмотря на то, чтобы быть названным символ eof ) на самом деле не означает конец файла: это означает, “отправляют вход ожидания в приложение теперь”. Это на самом деле близко к значению Ctrl + M ( eol), который отправляет вход ожидания плюс новая строка.

, Когда вы нажимаете Ctrl + D сразу после Ctrl + M (т.е. в начале строки) или после другого Ctrl + D, вход ожидания пуст. Таким образом приложение получает 0 байтов входа. В читает , вызов, читая 0 байтов сигнализирует о конце файла.


, Когда вы нажимаете Ctrl + Z,ожидающий ввод отбрасывается. Таким образом, обрабатывается только то, что уже было отправлено в приложение ( cat ) путем ввода новой строки или Ctrl + D перед нажатием Ctrl + Z .

19
27.01.2020, 19:43

Теги

Похожие вопросы