gpt4 book ai didi

linux - 保持管道打开而不读取它?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:17 24 4
gpt4 key购买 nike

我正在使用 vlc 媒体播放器通过互联网连接到 rtsp 流。

我只需要定期查看流,但每次建立连接的时间太长。

相反,我保持连接打开,vlc 将输出作为传输流写入命名管道。

然后 vlc 的第二个实例可以在我需要的时候从管道中读取。

问题是,据我所知,命名管道不能写入,除非它打开以供读取。

为了在 vlc 的第二个实例未打开时解决此问题,我:

    cat < $PIPE > /dev/null

除了以这种方式使用 cat 之外,是否有更好的方法来保持管道打开以进行写入?

最佳答案

如果管道尚未准备好写入,您没有说明连接 VLC 的作用。

如果它在发现管道未准备好写入并继续从连接读取时丢弃输出,那么您可以简单地拥有一个打开管道但不读取它的进程。像这样:

while sleep 7d; do :; done < $PIPE &

然后,当您开始播放 VLC 时,它将开始从管道读取数据,并且连接的 VLC 将写入它,直到播放 VLC 停止为止。

但是,如果正在连接的 VLC 在写入管道时停止,那么通过上述设置,RTSP 连接最终将超时,并且当正在播放的 VLC 开始从管道读取时,正在连接的 VLC 将终止或需要重新连接. VLC 也可能只是在写入管道时超时。

在这种情况下,您可以从管道读取并丢弃其内容,直到播放的 VLC 到达,并在它停止时继续读取。您可以让多个进程打开一个管道,但数据只能从中读取一次,即进程将竞争数据。

您可以通过在开始播放 VLC 之前使用 SIGSTOP 暂停丢弃过程并在它停止后使用 SIGCONT 恢复它来实现,假设读取管道的间隙不足以使连接超时。

像这样:

cat $FIFO > /dev/null &
kill -SIGSTOP %
vlc $FIFO
kill -SIGCONT %

关于linux - 保持管道打开而不读取它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com