Tôi đang xem mã để tiện ích 'ít' hơn, cụ thể là cách nó được nhập bằng bàn phím. Thật thú vị, trên dòng 80 của ttyin.c, nó đặt bộ mô tả tệp để đọc từ:Ít được nhập bằng bàn phím từ stderr?
/*
* 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;
Không phải là bộ mô tả tập tin 2 stderr? Nếu vậy, WTH ?! Tôi nghĩ rằng đầu vào bàn phím đã được gửi thông qua stdin.
Điều thú vị là ngay cả khi bạn làm ls -l * | less
, sau khi tệp kết thúc tải, bạn vẫn có thể sử dụng bàn phím để cuộn lên và xuống, nhưng nếu bạn làm ls -l * | vi
thì vi sẽ hét vào bạn vì nó không đọc từ stdin . Ý tưởng lớn là gì? Làm thế nào tôi đã kết thúc trong đất mới lạ này, nơi stderr là cả hai cách để báo cáo lỗi cho màn hình và đọc từ bàn phím? Tôi không nghĩ rằng tôi đang ở Kansas nữa ...
BTW, nếu bạn viết 'ls -l * | vim -', vim sẽ thực hiện phép thuật tương tự. – ephemient