Hãy xem xét các dòng mã sau đây:read() từ stdin
while((n = read(STDIN_FILENO, buff, BUFSIZ)) > 0)
Theo hiểu biết của tôi read/write
chức năng là một phần của phi đệm I/O. Vậy điều đó có nghĩa là hàm read()
sẽ chỉ đọc một ký tự cho mỗi cuộc gọi từ stdio? Hay nói cách khác, giá trị của n sẽ
-1 in case of error
n = 0 in case of EOF
1 otherwise
Nếu nó không phải là trường hợp, khi nào các read()
chức năng trên sẽ quay trở lại và tại sao?
Lưu ý: Tôi cũng nghĩ rằng read()
sẽ đợi cho đến khi nó đọc thành công BUFSIZ
số ký tự từ stdin. Nhưng điều gì xảy ra trong một số trường hợp các ký tự có sẵn để đọc ít hơn BUFSIZ
? Sẽ đọc chờ đợi mãi mãi hoặc cho đến khi EOF đến (Ctrl + D
trên unix hoặc Ctrl + Z
trên cửa sổ)?
Ngoài ra, hãy nói BUFSIZ = 100
và stdin = ACtrl+D
(tức là EOF ngay sau một ký tự đơn). Bây giờ số lần while loop
sẽ lặp lại như thế nào?
Là một FYI, tôi tin rằng bạn có thể đọc từ '0', là đầu vào tiêu chuẩn, nhưng chỉ có thể sử dụng 'stdin' với' fread() '. –
yeah u r right ... thnx !! Vì stdin thuộc loại 'FILE *', nó không thể được sử dụng với 'read' –
hoặc' STDIN_FILENO' nếu bạn đang trong tâm trạng ghi nhãn. – Dave