我怎样才能在Linux中创build一个文件,当我打开它时,它实际上正在运行一个进程

我有一组.sph文件,实际上是audio.wav文件加上一些标题。 我有一个名为sph2pipe的程序,它将这些.sph文件转换为普通的audio.wav文件。 我想为这些.sph文件创build一些符号链接,当我阅读这些链接时,我将实际阅读它们的转换版本。 像这样的东西:

 ln -s "sph2pipe a.sph |" "a.wav" ln -s "sph2pipe b.sph |" "b.wav" 

所以这样,我不必将所有audio文件转换为.wav文件,而只是创build链接到.sph文件,我希望他们能够即时转换。

我希望我自己清楚。 我在想我在找什么是一个命名的pipe道( https://en.wikipedia.org/wiki/Named_pipe ),但是这对我来说是没有用的,因为我需要多次读取.wav文件。

编辑1:我不必使用命名pipe道。 我只是认为这可能是解决scheme。 实际上,就我而言,这些.wav文件需要多次读取。

编辑-2:我想知道Samba(或gvfs-smb)如何工作。 所以这些文件在networking中,但在我的系统中也有一个可用的path,如:/run/user/1000/gvfs/smb-share:server=10.100.98.54,share=db/4a0a010a.sph。 我可以做这样的事吗? (我从一个特定的path和.wav文件读取.sph文件出来:))

编辑3:我想到目前为止:

keep_running.py:

 #!/usr/bin/python3 import subprocess cmd = 'mkfifo 4a0a010a.wav' subprocess.call(cmd, shell=True) cmd = 'sph2pipe -f wav 4a0a010a.wv1 > 4a0a010a.wav' while True: subprocess.call(cmd, shell=True) 

在shell中:

 ./keep_running.py & play 4a0a010a.wav play 4a0a010a.wav play 4a0a010a.wav 

我可以根据需要多次使用audio文件。

你认为这个实现的局限性是什么? 我会受到我可以产卵的进程数量的限制吗? 因为它看起来像我需要为每个文件产生一个进程。

不要这样做,这是一个坏主意。

如果你坚持反对,也许只是出于好奇,这是一个概念的证明。

 mkfifo a.wav sph2pipe a.sph >a.wav & 

现在,结果在a.wav中可用一次 ,但是一旦你消耗了它们,它们就会消失,如果需要再次执行,则必须启动一个新的后台进程实例。

听起来像一个简单的Makefile会更好地为您的用例服务(创建丢失的文件,重新创建需要更新的文件,可能会在成功完成主目标时删除临时目标)。

不,命名管道或fifo(7)想要一些现有的进程写它(和另一个读取它)。 当其他进程打开fifo进行阅读时,没有什么魔法可以启动写入过程。

您可以提供您的FUSE文件系统(其操作将产生声音数据)。 我不确定这是值得你的情况下努力。

请记住,几个进程可以同时读取或写入同一个文件。

编辑答案

或者,如果您没有超过1000个文件,您可以为每个FIFO重新生成一个进程,并不断重复发送文件,如下所示:

 for f in *.sph; do mkfifo "${f}.wav" (while :; do sph2pipe "$f" > "${f}.wav"; done) & done 

原来的答案

我不在我的电脑,但你可以自动生成WAV文件,使用它们,然后删除它们…

 for f in *.sph; do sph2pipe "$f" > "${f}.wav" done 

然后使用它们,,,

然后删除

 rm *.wav