2011-10-13 26 views
6

Trong một hộp Linux, tôi có vài quy trình viết cho một đường ống có tên và một số khác đang đọc nó. Tôi nghi ngờ rằng người đọc của tôi không theo kịp và có rất nhiều dữ liệu xếp hàng trong đường ống.Cách xem số lượng dữ liệu được xếp hàng đợi trong một đường ống có tên?

Có ai vui lòng cho tôi biết rằng, có cách nào để kiểm tra/xem có bao nhiêu dữ liệu được xếp hàng trong đường ống không? Bất kỳ lệnh Linux hoặc C API nào?

Cảm ơn bạn đã dành thời gian.

--KS

Trả lời

1

Tôi không nghĩ FIONREAD sẽ làm việc như FIONREAD được xác định bởi giá trị trả về bởi i_size_read được lưu trữ trong các inode như i_size. i_size không được sử dụng với các đường ống (đó là lý do tại sao stat luôn trả về 0 cho kích thước của đường ống).

http://lxr.free-electrons.com/source/include/linux/fs.h#L848

Nó nên có thể để có được kích thước bằng cách tổng hợp các tài sản len của bộ đệm (i_node.i_pipe.bufs). Nó không giống như giá trị này được tiếp xúc bởi stat hoặc ioctl mặc dù.

https://github.com/mirrors/linux-2.6/blob/master/fs/pipe.c

0

Bạn có thể thử recv (..., MSG_PEEK) - điều này nên đọc từ các đường ống mà không cần loại bỏ các dữ liệu từ nó (vì vậy đọc tiếp theo sẽ trở lại cùng một dữ liệu). Nó sẽ không nhất thiết phải cho bạn biết về tất cả các dữ liệu xếp hàng, chỉ là một số của nó.

+0

Công cụ recv() có hoạt động trên các tệp không phải là ổ cắm không? – bdonlan

+0

vì vậy, nói chung dữ liệu đọc từ đường ống sẽ bị xóa? – Chaitanya

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