Stdin

如何從文件描述符 0 中讀取 n 個字節到文件中?字節可以是任何值

  • January 5, 2022

我需要從中讀取特定數量的字節fd0並將它們寫入文件。字節可以有任何值。

我假設我不能使用dd,因為它停在EOF字節處。if=/dev/stdin由於我fd0不是鍵盤,因此無法使用。

當沒有提供輸入文件時,dd(和許多其他 unix 命令)預設從標準輸入獲取輸入。

stdin 不必是鍵盤,通常也不是。

dd 命令專門用於複製二進制數據。即使不是,EOF也不是 unix 中的一個字節。這是文件描述符上的一個條件,表明該源沒有更多數據。

從鍵盤(或者更確切地說,一個 tty),Ctrl-D控製字元不是 EOF,但(預設情況下)導致 tty 進入 EOF 條件,類似於Backspace導致字元從輸入緩衝區中刪除的方式。請注意,這僅在 tty 處於熟模式而不是原始模式時才有意義,並且 EOF 的控製字元可以在 tty 中更改。

讀取 n 個字節(其中 n 是一個數字)的完美可行的解決方案是dd count=1 bs=n

請注意,如果您從鍵盤鍵入多行,或者在發送所有數據之前有暫停,dd 會將其解釋為塊邊界。添加iflag=fullbock將強制 dd 在結束塊之前等待完整的 10 個字節。

引用自:https://unix.stackexchange.com/questions/683912