mur*_*mur 4 linux bash shell ubuntu
所以我在bash上运行这个:
# somedevice -getevent
Run Code Online (Sandbox Code Playgroud)
这个命令的作用就是它一直在运行,每当我的设备发送某个数据时,说它检测到温度的变化,它输出这样的东西
/dev/xyz: 123 4567 8910112238 20
/dev/xyz: 123 4567 8915712347 19
/dev/xyz: 123 4567 8916412345 22
/dev/xyz: 123 4567 8910312342 25
/dev/xyz: 123 4567 8910112361 18
/dev/xyz: 123 4567 8910112343 20
Run Code Online (Sandbox Code Playgroud)
这只是一直运行,一旦有任何原因它输出一些东西.所以执行无止境.
没有回声正常工作,但是当我尝试使用'>'运算符时,这似乎不会写入文件.
所以举个例子
#somedevice -getevent > my_record_file
Run Code Online (Sandbox Code Playgroud)
这不能正常工作,my_record_file只能间隔地写入数据,但是我想立即写入.
有任何想法吗?
输出正在缓冲,因为C标准库根据stdout是否是终端设备来更改输出缓冲模式.如果它是终端设备(根据isatty(3)),则stdout是行缓冲的:每次写入换行符时都会刷新它.如果它不是终端设备,那么它是完全缓冲的:只有在写入一定数量的数据(通常大约为4 KB到64 KB)时才会刷新它.
因此,当您使用shell的>重定向运算符将命令的输出重定向到文件时,它不再输出到终端并缓冲其输出.一个程序可以setvbuf(3)和朋友一起改变它的缓冲模式,但程序必须合作才能做到这一点.许多程序可以使用命令行选项,使他们行缓冲,例如grep(1)的--line-buffered选项.看看你的命令是否有类似的选项.
如果您没有这样的选项,您可以尝试使用诸如解unbuffer(1)压缩输出流之类的工具,但它并不总是有效并且不是标准实用程序,因此它并不总是可用.
| 归档时间: |
|
| 查看次数: |
6605 次 |
| 最近记录: |