当前位置: 首页 > 面试题库 >

Bash输出流写入文件

谭毅然
2023-03-14
问题内容

所以我在bash上运行它:

# somedevice -getevent

该命令的作用是一直保持运行状态,并且每当我的设备发送某个数据时,例如说它检测到温度变化,它就会输出类似的内容

/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

而且这只会继续运行,并且一旦有任何原因就会输出一些东西。因此,执行无止境。

没有回声运行完美,但是当我尝试使用’>’运算符时,这似乎没有写入文件

例如

#somedevice -getevent > my_record_file

这不能正常工作,my_record_file只获取 间隔 写入的数据,但是我想立即写入。

有任何想法吗?


问题答案:

因为C标准库根据stdout是否是终端设备来更改输出缓冲模式,所以正在缓冲输出。如果是终端设备(根据isatty(3)),则stdout是
行缓冲的 :每次写入换行符时,它将被刷新。如果它不是终端设备,那么它将被 完全缓冲 :仅在写入一定数量的数据(通常为4 KB到64
KB左右)时才刷新它。

因此,当您使用Shell的>重定向操作符将命令的输出重定向到文件时,它不再输出到终端,并且会缓冲其输出。程序可以与setvbuf(3)和朋友更改其缓冲模式,但是该程序必须配合执行此操作。许多程序都有命令行选项来使它们行缓冲,例如grep(1)--line- buffered选项。查看您的命令是否具有类似的选项。

如果没有这样的选项,则可以尝试使用诸如unbuffer(1)缓冲输出流之类的工具,但是它并不总是有效,也不是标准实用程序,因此它并不总是可用。



 类似资料:
  • 我有几个输出侦听器正在实现。它可以是写到stdout或文件的,也可以是写到内存或任何其他输出目标;因此,我在方法中指定作为(an)参数。 现在,我收到了。在这里向流写入的最佳方式是什么? 我应该只使用吗?我可以给它字节,但如果目标流是字符流,那么它会自动转换吗? 我需要用这里的一些桥流来代替吗?

  • 问题内容: 我有几个正在实现OutputStream的输出侦听器。它可以是写到stdout或文件的PrintStream,也可以写到内存或任何其他输出目标。因此,我在方法中将OutputStream指定为参数。 现在,我已经收到了字符串。在此处写入流的最佳方法是什么? 我应该只使用Writer.write(message.getBytes())吗?我可以给它提供字节,但是如果目标流是字符流,那么它

  • 现在准备要构建一个工具,用来把前面idata.txt里的数据按group分行显示,就像这样: 2 9 10 3 1 2 3 我们可以借助语法分析树的Listener机制来对词法分析结束后生成的记号流进行改写,我们不需要实现每一个Listener接口方法,只需要在捕获到group的时候把换行符插到它末尾就行。实现改写的代码如下所示: import org.antlr.v4.runtime.Toke

  • 本文向大家介绍java 对象输入输出流读写文件的操作实例,包括了java 对象输入输出流读写文件的操作实例的使用技巧和注意事项,需要的朋友参考一下 java 对象输入输出流读写文件的操作实例 java 支持对对象的读写操作,所操作的对象必须实现Serializable接口。 实例代码: 输出结果: 如有疑问请留言或者到本站社区交流讨论,本站关于java开发的文章还有很多,希望大家搜索查阅,感谢阅读

  • 本小节将会介绍基本输入输出的 Java 标准类,通过本小节的学习,你将了解到什么是输入和输入,什么是流;输入输出流的应用场景,File类的使用,什么是文件,Java 提供的输入输出流相关 API 等内容。 1. 什么是输入和输出(I / O) 1.1 基本概念 输入/输出这个概念,对于计算机相关专业的同学并不陌生,在计算中,输入/输出(Input / Output,缩写为 I / O)是信息处理系

  • 问题内容: 在我的机器上,我有一些软件可以在终端中接收命令并返回值列表。 要运行它,我必须输入以下内容: 我正在尝试将其作为python程序的一部分运行。当我运行以下命令时: 然后我得到想要返回到终端的值(其中epoch_name是文件名的变量名)。但是,当我尝试将结果写入文件时: 产生了文件123.txt,但它为空。 我知道我放错了“和/或’字符,但是我不知道它们应该去哪里。 任何帮助将不胜感激