【发布时间】:2019-08-21 20:13:29
【问题描述】:
我想使用命名管道将浮点值从 C 代码发送到 Python 代码。我正在将接收到的值打印到 Python 端的终端中,但是除了值本身之外,还会显示乱码。
管道开口:
void Init_FIFO(void)
{
// FIFO file path
char * bldc_fifo = "/tmp/bldc_fifo";
// Creating the named FIFO -- mkfifo(<pathname>, <permission>)
mkfifo(bldc_fifo, 0666);
// Open FIFO to write/read data
fd_fifo = open(bldc_fifo, O_RDWR | O_NONBLOCK);
//fd_fifo = open(bldc_fifo, O_WRONLY | O_RDONLY | O_NONBLOCK);
}
我使用 sprintf 将浮点数转换为字符串,代码如下,
void SendDataOverFifo(float angle)
{
char str[64];
unsigned char writeBuffer[] = "Hello!";
Init_FIFO();
sprintf(str, "%f\n", angle);
write(fd_fifo, str, sizeof(str));
//write(fd_fifo, writeBuffer, sizeof(writeBuffer));
close(fd_fifo);
}
那么为了在Python端接收代码,我就用这个
#!/usr/bin/python
import os
import errno
import time
FIFO = '/tmp/bldc_fifo'
try:
os.mkfifo(FIFO)
except OSError as oe:
if oe.errno != errno.EEXIST:
raise
print("Opening FIFO...")
with open(FIFO, encoding='utf-8', errors='ignore') as fifo:
print("FIFO opened")
while True:
time.sleep(0.1)
data = fifo.read()
print(data)
我得到的输出是这样的
i-W ?UOeiEU11.417070
正确的结果应该在哪里:
11.417070
注意:如果我尝试只发送“你好!”,它可以正常工作。
我在这里缺少什么?提前致谢。
【问题讨论】:
-
你能使用像
sprintf(str, "%e\n", angle);这样的指数格式吗?
标签: python c linux named-pipes