我正在看一下'less'实用程序的代码,特别是它如何获得键盘输入.有趣的是,在ttyin.c的第80行,它将文件描述符设置为:
/*
* Try /dev/tty.
* If that doesn't work, use file descriptor 2,
* which in Unix is usually attached to the screen,
* but also usually lets you read from the keyboard.
*/
#if OS2
/* The __open() system call translates "/dev/tty" to "con". */
tty = __open("/dev/tty", OPEN_READ);
#else
tty = open("/dev/tty", OPEN_READ);
#endif
if (tty < 0)
tty = 2;
Run Code Online (Sandbox Code Playgroud)
是不是文件描述符2 stderr?如果是这样,WTH ?! 我以为键盘输入是通过stdin发送的.
有趣的是,即使你这样做ls -l * | less,在文件加载完成后,你仍然可以使用键盘上下滚动,但如果你这样做ls -l * | vi …
假设我有8b1f 0008 0231 49f6 0300 f1f3 75f4 0c72 f775 0850 7676 720c 560d 75f0 02e5 ce00 0861 1302 0000 0000,如何在不复制+粘贴到十六进制编辑器的情况下轻松获取二进制文件?
我开始给我写一些Common Lisp,我只是把事情放在一起并格式化它们.
让我们假设我有一个alist,就像这样:
(defvar *map* '((0 . "zero") (1 . "one") (2 . "two")))
Run Code Online (Sandbox Code Playgroud)
我该如何格式化呢?
0: zero
1: one
2: two
Run Code Online (Sandbox Code Playgroud)
我在想类似的东西(format t "~{~{~a: ~a~}~%~}" *map*),但是这会产生一个错误,因为"零"不是一个列表,你不能把它当作汽车.
当然,做(format t "~{~a~%~}" *map*)印刷品
(0 . "zero")
(1 . "one")
(2 . "two")
Run Code Online (Sandbox Code Playgroud)
喜欢它应该,但它不是我想要的.有没有比这更好的方法(dolist (entry *mapping*) (format t "~a: ~a~%" (car entry) (cdr entry)))呢?