簡體   English   中英

從stdin讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM