[英]Read from stdin
似乎read(0,buffer,255)在讀取時總是返回1。 在我的程序中,我通過管道將輸入直接輸入該程序,但是我注意到它總是返回1。這是為什么? 有更好的方法嗎? 同時,似乎已正確填充緩沖區,超過了1個字符。
先感謝您!
允許read
返回的字符少於您要求的字符,因此您應該為這種可能發生的情況編寫代碼,而不是試圖找到避免這種情況的方法。
例如,如果文件(或管道)僅剩22個字節,它將為您提供這些字節。
在Linux手冊頁中 (因為read
是POSIX而不是C ++):
如果此數目小於請求的字節數,這不是錯誤; 例如,這可能是因為當前實際可用的字節較少(可能是因為我們接近文件末尾,或者因為我們正在從管道或終端讀取),或者因為read()被a中斷了。信號。
如果緩沖區的其余部分似乎正確填充,我可以向您保證,這完全是偶然的,您不應該依賴於此。 如果read
返回1,則僅使用該一個字符。 如果您遵循規則,但角色似乎消失了, 那么您可以返回並抱怨read
存在錯誤(我不需要指出這是不可能的)。
嘗試以下程序:
#include <stdio.h>
#include <stdlib.h>
int main (void) {
char buff[255];
int i;
while ((i = read (0, buff, 255)) > 0) {
printf ("%3d: [%*.*s]\n", i, i, i, buff);
}
return 0;
}
與:
echo hello there | ./tstprg ; (echo hello ; sleep 1 ; echo there) | ./tstprg
看看你得到什么。 我的輸出是:
12: [hello there
]
6: [hello
]
6: [there
]
如我所料
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.