我需要从文件中读取特定数量的字节fd0
并将其写入文件中。字节可以具有任何值。
我认为我无法使用,dd
因为它停在EOF
字节处。由于我的不是键盘,if=/dev/stdin
因此无法使用。fd0
答案1
当没有提供输入文件时,dd(以及许多其他 unix 命令)默认从 stdin 获取输入。
stdin 不一定是键盘,而且通常也不是。
dd 命令专门用于复制二进制数据。即使不是,EOF
也不是 unix 中的一个字节。它是文件描述符上的一个条件,指示该源不再有数据。
从键盘(或者更重要的是,tty),Ctrl-D控制字符不是 EOF,但(默认情况下)导致 tty 进入 EOF 条件,类似于如何从Backspace输入缓冲区中删除字符。请注意,这仅在 tty 处于“cooked”模式而不是“raw”模式时才有意义,并且可以在 tty 中更改 EOF 的控制字符。
读取 n 个字节(其中 n 是一个数字)的完美可行的解决方案是dd count=1 bs=n
请注意,如果您从键盘输入多行或在发送所有数据之前有暂停,则 dd 会将其解释为块边界。添加iflag=fullbock
将强制 dd 在结束块之前等待完整的 10 个字节。