我有一个Python进程写在一个命名管道上,一个C++程序读取它。(我在C++中创建管道)。嗯,它似乎很管用。但是,有时我会注意到数据丢失。读卡器没有检测到数据!我做错什么了吗?在
以下是我如何创建管道:
void create_pipes(string pipename){
char * cstr1 = new char [pipename.length()+1];
strcpy (cstr1, pipename.c_str());
cout << "Creating " << pipename << " pipe..." << endl;
unlink (cstr1); // Delete pipe
int result = mkfifo (cstr1, S_IRUSR| S_IWUSR); // Create Pipe
if( result == -1 ){
cout << "There was en error creating the pipe! " << result << endl;
//return 0;
}
else
cout << "Pipe created!" << endl;
}
现在,我有一个线程可以读取管道,如下所示:
^{pr2}$在python中,我只需通过以下操作将数据写入管道:
def write_pipe(file_string):
while True:
try:
pipe.write(file_string)
pipe.flush()
break
except:
print "Error while writing to pipe"
continue
是什么导致了我的问题?python程序成功地将数据写入管道;但是c++程序有时不会读取管道。这是不是因为python进程在实际读取数据之前比c++程序更快地写入数据?我该怎么办?在
谢谢。在
buf
不保证被终止,也不保证不会从您发布的代码中嵌入'\0'
字符。这应该可以更好地工作,但是如果Python代码在它所写的数据中嵌入一个'\0'
,那么它仍然可能失败:并且您的代码不能正确地处理错误条件应该
read()
返回-1。在相关问题 更多 >
编程相关推荐