hehehe Asked: 2021-12-26 14:21:33 +0800 CST2021-12-26 14:21:33 +0800 CST 2021-12-26 14:21:33 +0800 CST 如何从文件描述符 0 中读取 n 个字节到文件中?字节可以是任何值[重复] 772 我需要从中读取特定数量的字节fd0并将它们写入文件。字节可以有任何值。 我假设我不能使用dd,因为它停在EOF字节处。if=/dev/stdin由于我fd0不是键盘,因此无法使用。 stdin 1 个回答 Voted Best Answer user10489 2021-12-26T16:57:31+08:002021-12-26T16:57:31+08:00 当没有提供输入文件时,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 个字节。
当没有提供输入文件时,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 个字节。