Tôi là người mới bắt đầu lắp ráp (sử dụng nasm). Tôi đang học lắp ráp thông qua một khóa học đại học.Tại sao hệ thống sys_read gọi kết thúc khi phát hiện một dòng mới?
Tôi đang cố gắng hiểu hành vi của cuộc gọi hệ thống linux sys_read khi được gọi. Cụ thể, sys_read dừng khi đọc dòng mới hoặc nguồn cấp dữ liệu dòng. Theo những gì tôi đã được dạy, điều này đúng. Điều này online tutorial article cũng khẳng định thực tế/yêu cầu bồi thường.
Khi sys_read phát hiện nguồn cấp dữ liệu dòng, kiểm soát trở lại chương trình và đầu vào của người dùng được đặt tại địa chỉ bộ nhớ bạn đã chuyển trong ECX.
Tôi đã kiểm tra hướng dẫn của lập trình viên linux cho cuộc gọi sys_read (qua "man 2 read"). Nó không đề cập đến hành vi khi nó được cho là phải không?
đọc() cố gắng đọc tối đa số byte từ bộ mô tả tệp fd vào bộ đệm bắt đầu tại buf.
Trên các tệp hỗ trợ tìm kiếm, thao tác đọc bắt đầu ở mức bù đắp tệp và bù đắp tệp được tăng lên theo số byte đọc. Nếu bù đắp tập tin ở hoặc qua cuối tệp, không có byte nào là đọc và đọc() trả về 0.
Nếu đếm bằng không, hãy đọc() có thể phát hiện các lỗi được mô tả bên dưới. Trong sự vắng mặt của bất kỳ lỗi nào, hoặc nếu read() không kiểm tra lỗi, một số đọc() với tổng số 0 trả về 0 và không có hiệu ứng nào khác.
Nếu số lớn hơn SSIZE_MAX, kết quả không được chỉ định.
Vì vậy, câu hỏi của tôi thực sự là, tại sao hành vi xảy ra? Nó là một đặc điểm kỹ thuật trong hạt nhân Linux rằng điều này sẽ xảy ra hoặc là nó một hệ quả của cái gì khác?
Cảm ơn rất nhiều vì đã giải thích và tham khảo! – Mercado