【发布时间】:2015-04-11 22:55:05
【问题描述】:
我一直在尝试从命名管道中读取连续数据。但是由于某种原因,如果我不延迟,接收器将停止读取,并且在几个样本后只显示一个空白屏幕。
我需要发送可能在毫秒内发生变化的连续数据,这就是为什么延迟不起作用的原因。我正在尝试首先使用 while 循环来模拟它(真正的脚本将读取财务数据)。这是我的第一次尝试:
这是发件人,一个python脚本:
import os
import time
try:
os.remove("/tmp/pipe7") # delete
except:
print "Pipe already exists"
os.mkfifo("/tmp/pipe7") # Create pipe
x = 0
while True:
x = time.time()
pipe = open("/tmp/pipe7", "w")
line = str(x) + "\r\n\0"
pipe.write(line)
pipe.close()
#time.sleep(1)
os.remove("/tmp/pipe7") # delete
这是 C/C++ 中的接收器:
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <sys/stat.h>
#define MAX_BUF 1024
using namespace std;
int main()
{
while(1){
char buf[MAX_BUF];
memset (buf, 0, sizeof(buf)); //Clearing the message buffer
int fd = open("/tmp/pipe7", O_RDONLY); // Open the pipe
read(fd, buf, MAX_BUF); // Read the message - unblock the writing process
cout << buf << endl;
close(fd); // Close the pipe
}
return 0;
}
我的方法有什么问题?使用管道在两个程序之间持续通信的最佳方式是什么?
【问题讨论】:
-
我想知道为什么您每次读/写一行时都觉得需要打开和关闭管道?也许你错过了文件对象的
flush方法? -
@SylvainLeroux:这肯定是问题所在,因为管道逻辑绑定到可用的读取器和写入器。
-
我尝试不每次都关闭管道,但似乎仍然没有解决问题。我对管道或套接字编程没有太多经验。所以我很难找出问题所在。
标签: python c++ ipc named-pipes fifo