2017-02-16 126 views
8

Tôi đã xem xét điều này trong man cat (GNU/Linux).
Hướng dẫn chỉ cần nói -u (ignored) mà không giải thích lý do.
Tôi tò mò tìm kiếm trên Google nhưng có vẻ như không ai hỏi điều này trước đây.
Sau đó, tôi đã xem other implementations của cat.
Tôi nhận thấy Con mèo của Apple cũng thực hiện tùy chọn này (xem cat.c). Trong mã nguồn, nó cho biếtViệc sử dụng tùy chọn "-u" trong lệnh cat là gì?

... 
case 'u': 
    setbuf(stdout, NULL); 
    break; 
... 

Tôi đoán tùy chọn này có nghĩa là 'không bị chặn'. Việc sử dụng tùy chọn này là gì? Tại sao nó ở đó và tại sao nó bị bỏ qua? Tôi nghĩ rằng phải có một số lý do cho điều đó.

+1

Nếu bạn đang tìm kiếm thông tin về việc sử dụng thực tế tùy chọn, bạn có thể có nhiều may mắn hơn trên trang web trao đổi ngăn xếp 'SuperUser' hoặc' Unix và Linux', thay vì SO. – AntonH

+0

[Có lẽ nhìn thấy những gì 'setbuf' sẽ giúp] (http://en.cppreference.com/w/c/io/setbuf). – WhozCraig

+0

Tôi đoán nó có nghĩa là 'unbuffered' – hek2mgl

Trả lời

6

tùy chọn -u vô hiệu hóa đệm thành stdout.

GNU tài liệu đọc:

Sử dụng bộ đệm I/O cho stdout. Posix không chỉ định hành vi mà không có tùy chọn này.

có lẽ chỉ ra rằng hành vi mặc định hiện tại của cat là xuất ra mà không bị giật.

4

Đây là tùy chọn tuân thủ POSIX cho Unix/Linux. GNU cat thực hiện thao tác này tự động và không có cách nào để tắt. Khi được chỉ định, nó được chấp nhận nhưng bị bỏ qua vì nó không ảnh hưởng đến hành vi.

Chi tiết cat(1):

-u Viết byte từ tập tin đầu vào cho đầu ra tiêu chuẩn không chậm trễ như từng được đọc.

7

Ý tưởng đằng sau cat -u thực sự là đầu ra nên không có bộ đệm, do đó ngay cả khi cat là trong một đường ống dẫn, các dữ liệu sẽ được ghi ngay khi nó được đọc.

Nó có thể quan trọng khi bạn sử dụng cat -u "[email protected]" | … và đầu vào là, trên thực tế, đến từ bàn phím.

Các cơ hội được rằng GNU cat hiệu quả hoạt động mà không đệm (sử dụng trực tiếp read()write() cuộc gọi), do đó tùy chọn -u là không thích hợp - nó luôn luôn làm việc ở 'chế độ unbuffered'.

9

mỗi the POSIX standard for cat:

SYNOPSIS

cat [-u] [file...] 

...

OPTIONS

...

Các tùy chọn dưới đây được hỗ trợ:

-u Viết byte từ tập tin đầu vào cho đầu ra tiêu chuẩn không chậm trễ như từng được đọc.

Điều đó có thể được triển khai bằng cách tắt tính năng lưu vào bộ đệm.

2

Tùy chọn -u có giá trị trong việc tạo mẫu không bị chặn đọc từ FIFOs. Mục đích là để hỗ trợ trình tự sau đây:

mkfifo foo>
mèo -u foo>/dev/tty13 &
mèo -u> foo

Đó là không xác định cho dù sản lượng giữa các ý kiến ​​hay không được đệm trong trường hợp mặc định . đôi khi được quan tâm khi đầu ra tiêu chuẩn được kết hợp với một thiết bị đầu cuối, vì buffer- ing có thể làm chậm đầu ra. Sự hiện diện của tùy chọn -u đảm bảo rằng I/O không bị chặn là . Nó được thực hiện xác định xem các tiện ích con mèo đệm đầu ra nếu tùy chọn -u không được chỉ định. Theo truyền thống, tùy chọn -u được thực hiện bằng cách sử dụng tương đương của hàm setvbuf() được xác định trong khối lượng Giao diện Hệ thống của IEEE Std 1003.1-2001.

Các vấn đề liên quan