我有一个涉及两个命名管道的问题似乎无法解决。基本上,我有两个无法控制的流程。他们通过命名管道 ( ) 进行通信mknod pipe p
。进程一是 GPS 驱动程序,以 NMEA0183 格式输出消息。流程二是一个导航应用程序,它读取 NMEA0183 数据以从 GPS 获取位置和日期/时间。我需要调整此数据(原因:谷歌搜索 WNRO 或询问)。
第一个进程以 1 秒的间隔连续将数据(约 5-8 行文本)写入 /var/run/one.pipe 并将其留在那里直到被读取(?)
第二个进程是从命名管道读取此数据。我可以更改要读取的命名管道的名称。我将其更改为 /var/run/two.pipe
最终目标是从 one.pipe 读取数据,进行一些处理,然后将其传递给 Two.pipe。然而,与此同时,为了进行测试,我只是尝试将数据从 one.pipe 逐一复制到 Two.pipe。我认为在整个处理过程中浪费时间是不可行的,直到我能够完成这个(更简单的?)任务。
一个非常简单的 shell 脚本可以工作:copy.sh
#!/bin/sh
cat one.pipe > two.pipe &
Run Code Online (Sandbox Code Playgroud)
现在我捕获了源进程写入的一些数据one.pipe
,并尝试手动将其写入two.pipe
以供读取进程读取:
#!/bin/sh
while true; do
echo "\$GPGGA,,,,,,,,*12" > two.pipe
echo "\$GPGSA,,,,,,,,*23" > two.pipe
echo "\$GPRMC,,,,,,,,*34" > two.pipe
echo "\$GPGSV,,,,,,,,*45" > two.pipe
echo "\$GPGSV,,,,,,,,*56" > two.pipe
echo "\$GPGSV,,,,,,,,*67" > two.pipe
# checksums (*xx) are …
Run Code Online (Sandbox Code Playgroud)