Я экспериментировал со стразами, прочитав об этом в книге.
Я пытался дать ему странный ввод, поэтому я попытался дать nano / vim в качестве ввода. Например,
strace vim
Я заметил, что вывод был очень специфическим в обоих случаях.
После запуска любое последующее действие, включающее клавиатуру и мышь, динамически отображает вывод строки в терминале, но имеет действительно странный формат:
[0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)lect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0fsync(3) = 0eout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)lect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)eout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)lect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timselect(1, [0], [], [0], NULL {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)lect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) select(1select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout) write(1,select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)t(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)te(1, "\33[?25lt\33[25;267H5\33[1;25H\33[?25h", 30t 6
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)(1, "\33[?25le\33[25;267H7\33[1;27H\33[?25h", 30e 7
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeosesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut) 8
-- INSERT -- sesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut) 1,2 All) = 58 sesselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)ut)], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
sewselect(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)fsdgaeeeaeeec=0, teteaeteae) = 0 (Timeout)
wriwrite(1, "\33[?25lqhdfffsdgaeee\33[11Cteae\33[25"..., 50qhdfffsdgaeee_sec=0, teateae=0}) = 0 (Timeout)
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
select(1, [0], [], [0], {tv_sec=0, tv_usec=0}) = 0 (Timeout)
write(1, "\33[1;2H\33[?25h", 12 7
После нажатия клавиши, чтобы попытаться выполнить операцию записи в vim, среди выходных данных, отображаемых в терминале, были выходные данные strace, относящиеся к различным набираемым мной символам, см .:
wriwrite(1, "\33[?25lqhdfffsdgaeee\33[11Cteae\33[25"..., 50qhdfffsdgaeee_sec=0, teateae=0}) = 0
Кто-нибудь может объяснить, почему вывод такой странный при работе:
strace nano
или
strace vim
?
А именно, почему вывод в терминале обновляется при каждом нажатии кнопки на клавиатуре или мыши или при выполнении операции прокрутки с помощью мыши? Может ли кто-нибудь конкретно объяснить, как strace взаимодействует с vim в этом случае с точки зрения ввода / вывода?