![如何在 Bash 中精确地创建一个读取系统调用?](https://linux22.com/image/1595785/%E5%A6%82%E4%BD%95%E5%9C%A8%20Bash%20%E4%B8%AD%E7%B2%BE%E7%A1%AE%E5%9C%B0%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E8%AF%BB%E5%8F%96%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%EF%BC%9F.png)
我想要做的是在数据到达时进行处理,与换行符无关。
- 当
read -n $n
在 stdin 上使用管道时,Bash 会对read (0, buf, 1)
每个字节进行一次系统调用,如果要处理的数据量不小(例如,1 MB 或更多),则速度会太慢。 - 当使用
read -N $n
Bash 时会重复进行系统调用read (0, buf, <RestOf$n>)
直到$n
达到,所以我无法开始处理迄今为止收到的内容。 - 使用时,即使读取了一些数据,
read -N $n -t 0.1
结果也是空的。这意味着:数据丢失了。这是 Bash 的一个错误还是一个功能?$REPLY
那么,我怎样才能使用read
任意参数进行一次count
系统调用bash
,然后处理迄今为止收到的输入?