Đối với đầu vào chuẩn - hãy nghĩ rằng trình bao; thực sự, hãy nghĩ đến vỏ Bourne kiểu cũ, vì Bash và người thân có chỉnh sửa dòng lệnh. Bạn nhập một dòng đầu vào; nếu bạn phạm sai lầm, bạn sử dụng ký tự xóa (mặc định là Backspace, thường; đôi khi Xóa) để xóa ký tự trước đó. Nếu bạn mess up hoàn toàn, bạn có thể hủy bỏ toàn bộ dòng với các ký tự dòng giết (không hoàn toàn tiêu chuẩn hóa, thường là Control-X). Trên một số hệ thống, bạn sẽ xóa từ với Control-W. Tất cả điều này là đầu vào kinh điển. Toàn bộ dòng được thu thập và chỉnh sửa cho đến khi ký tự cuối dòng — Quay lại — được nhấn. Sau đó, toàn bộ dòng được cung cấp cho các chương trình chờ. Tùy thuộc vào các cuộc gọi hệ thống read()
vượt trội, toàn bộ dòng sẽ có sẵn để đọc (bằng một hoặc nhiều cuộc gọi đến read()
).
Đối với đầu vào không chuẩn tắc — nghĩ vi
hoặc vim
hoặc bất kỳ điều gì — bạn nhấn một ký tự và ngay lập tức có sẵn cho chương trình. Bạn không được giữ cho đến khi bạn nhấn trở lại. Hệ thống không chỉnh sửa các ký tự; chúng được cung cấp cho chương trình ngay khi chúng được nhập. Tùy thuộc vào chương trình để diễn giải mọi thứ một cách thích hợp. Bây giờ, vim
thực hiện một số điều trông giống như kiểu nhập chuẩn. Ví dụ, backspace di chuyển ngược, và trong chế độ đầu vào xóa những gì đã có. Nhưng đó là vì vim
chọn để ứng dụng hoạt động như thế.
Đầu ra hợp quy và phi kinh điển là một doanh nghiệp ít nghiêm trọng hơn nhiều. Có một vài bit và phần của sự khác biệt, liên quan đến những thứ như cho dù để echo vận chuyển trở lại trước khi dòng thức ăn, và có làm chậm trễ (không cần thiết với thiết bị điện tử, quan trọng trong những ngày khi thiết bị đầu ra có thể là một 110- baud teletype). Nó cũng có thể làm những việc như xử lý các thiết bị đầu ra không phân biệt chữ hoa chữ thường —. Chữ cái viết thường được viết bằng chữ hoa và chữ hoa và chữ thường. Nếu bạn đã gõ tất cả chữ cái viết hoa vào dấu nhắc đăng nhập, chương trình đăng nhập sẽ tự động chuyển sang chế độ mà tất cả các mũ đều được xuất bằng dấu gạch chéo ngược ở phía trước mỗi vốn thực tế. Tôi nghi ngờ rằng điều này không còn được thực hiện trên các thiết bị đầu cuối điện tử nữa.
Trong một bình luận, TitaniumDecoy hỏi:
Vì vậy, với đầu vào không kinh điển, là bộ đệm đầu vào bỏ qua hoàn toàn? Ngoài ra, nơi nào các ngành học đường đi vào?
Với đầu vào không chuẩn, bộ đệm đầu vào vẫn được sử dụng; nếu không có chương trình nào có cuộc gọi read()
đang chờ kết nối từ thiết bị đầu cuối, các ký tự được giữ trong bộ đệm đầu vào. Điều không xảy ra là chỉnh sửa bộ đệm đầu vào.
Các quy tắc ngành là những thứ như tập hợp các thao tác mà chỉnh sửa đầu vào thực hiện. Vì vậy, một khía cạnh của kỷ luật dòng là nhân vật xóa sẽ xóa một ký tự trước trong chế độ nhập chuẩn. Nếu bạn có tập hợp icase
(trường hợp đầu vào-ánh xạ), thì các ký tự viết hoa được ánh xạ tới chữ thường trừ khi có dấu gạch chéo ngược đứng trước; đó là một kỷ luật đường thẳng, tôi tin rằng, hoặc một khía cạnh của một kỷ luật đường thẳng.
tôi quên đề cập đến chế biến EOF (Control-D) được xử lý trong chế độ kinh điển; nó thực sự có nghĩa là 'làm cho đầu vào tích lũy có sẵn cho read()
'; nếu không có đầu vào tích lũy (nếu bạn nhập Control-D ở đầu dòng), thì read()
sẽ trả về 0 byte, sau đó được hiểu là EOF theo chương trình. Tất nhiên, bạn có thể vui vẻ gõ nhiều ký tự trên bàn phím sau đó, và các chương trình bỏ qua EOF (hoặc chạy ở chế độ không chuẩn) sẽ khá hạnh phúc.
Tất nhiên, ở chế độ chuẩn, các ký tự được nhập tại bàn phím thường được lặp lại với màn hình; bạn có thể kiểm soát cho dù đó là lặp lại xảy ra. Tuy nhiên, điều này phần nào là tiếp tuyến với đầu vào kinh điển; chỉnh sửa bình thường xảy ra ngay cả khi tiếng vọng tắt.
Tương tự, tín hiệu ngắt và thoát là các đồ tạo tác của chế độ xử lý chuẩn. Vì vậy, cũng là các tín hiệu điều khiển công việc như Control-Z để tạm dừng quá trình hiện tại và quay lại trình bao. Tương tự, điều khiển luồng (Điều khiển-S, Điều khiển-Q để dừng và bắt đầu đầu ra) được cung cấp theo chế độ chuẩn.
Chương 4 của Rochkind Advanced Unix Programming, 2nd Edn bao gồm đầu cuối I/O và cung cấp nhiều thông tin này - và nhiều hơn thế nữa. Các sách lập trình UNIX khác (ít nhất là những cuốn sách tốt) cũng sẽ bao gồm nó.
Vì vậy, với đầu vào không chuẩn, bộ đệm đầu vào có bị bỏ qua hoàn toàn không? Ngoài ra, nơi nào các ngành học đường đi vào? – titaniumdecoy