在不使用mkfifo或mknod的情况下制作了fifo文件

时间:2015-02-03 04:15:41

标签: fifo mkfifo

我试图使用vlc和mpg123播放器通过gnuradio传输mp3音乐。按照这个网站的例子 http://www.opendigitalradio.org/Simple_FM_transmitter_using_gnuradio

命令是:

$ mkfifo stream_32k.fifo
$ mpg123 -r32000 -m -s  http://maxxima.mine.nu:8000 >stream_32k.fifo

使用我自己的mp3流,我按照这个例子,但有一次我忘记了

$ mkfifo stream_32k.fifo

到终端,而只是键入

$ mpg123 -r32000 -m -s  http://localhost:8080/mp3 >stream_32k.fifo

直接到终端。结果是一个未突出显示的.fifo文件(如使用mkfifo创建的文件)

当与gnuradio一起使用时,用mkfifo制作的fifo文件只能播放一次,其大小总是返回0字节。

虽然我在不使用mkfifo的情况下意外创建的那个字节长时间保留了字节,我可以随时访问它,这对我来说更有利。

以这种方式制作fifos是否有缺点?还有人可以告诉我实际上做了什么吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

您刚刚创建了一个常规文件。因此它保留了磁盘上的字节,其中真正的FIFO与永久磁盘存储无关,它本质上是内存中的缓冲区,您可以提供“磁盘名称”,以便面向文件的命令可以使用它。缺点是,当您编写永久磁盘文件时,您无法同时读取它(一般来说,这取决于编写程序实际写入的方式,但您不能依赖它)。

如果您认为文件名中的.fifo使其成为FIFO,那么它就不对了。 mkfifo实用程序是将文件名附加到FIFO的原因。

如果您想保留文件并同时播放流,可以使用tee之类的实用程序:

mkfifo stream.fifo
mpg123 ...... | tee saved_stream.mp3 > stream.fifo

然后像往常一样从stream.fifo播放。 Tee将“捕获”通过它的字节并将它们保存到磁盘。