簡體   English   中英

您如何“刷新” write()系統調用?

[英]How do you “flush” the write() system call?

我從用戶處獲取輸入,然后使用read()和write()系統調用將其打印到標准輸出。 由於某些原因,除了常規輸出外,它還會打印一些額外的字符。 其他字符來自用戶輸入,因此它們不是隨機的。 但是,我認為這可能是由於未清除緩沖區以接收新輸入的事實。 我搜索了許多適用於這種情況的不同事物,但我仍然感到困惑。 我僅為此使用低級I / O,因此不會實現C標准庫。 我問過的大多數人都說使用“ fflush”,但我認為這僅適用於stdio.h庫,而我不會使用。 在此先感謝您提供任何建議或資源。

您如何“刷新” write()系統調用?

你不知道 這是系統調用。 您沒有任何要刷新的應用程序端緩沖區。

我從用戶處獲取輸入,然后使用read()write()系統調用將其打印到標准輸出。 由於某些原因,除了常規輸出外,它還會打印一些額外的字符。

您的代碼中有一個錯誤。 它看起來應該像這樣:

int count;
while ((count = read(inFD, buffer, sizeof buffer)) > 0)
{
    write(outFD, buffer, count);
}

十之八九你有第三個參數write錯誤。

我問過的大多數人都說使用“ fflush”,但我認為這僅適用於stdio.h庫,而我不會使用。

他們錯了,而你是正確的。

試試這個功能:

eraseFunction()
{
    std::cin.clear();
    std::cin.ignore(std::cin.rdbuf()->in_avail());
}

因此,一旦您讀取了()內容,就應該調用此函數以擦除緩沖區

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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