Python FIFO管道仅在写入端关闭后读取
我试图在python文件和C文件之间创建一个FIFO管道,但问题是当从C文件读取输入时,getline会一直阻塞,直到写入端(在python文件中)关闭 C文件:Python FIFO管道仅在写入端关闭后读取,python,c,pipe,fifo,Python,C,Pipe,Fifo,我试图在python文件和C文件之间创建一个FIFO管道,但问题是当从C文件读取输入时,getline会一直阻塞,直到写入端(在python文件中)关闭 C文件: char fifo_emg[] = "emg"; mkfifo(fifo_emg, S_IRWXU); int fd_emg = open(fifo_emg, O_RDONLY); FILE* fp = fdopen(fd_emg, "r"); char *line = NULL; size_t len = 0; ssize_t
char fifo_emg[] = "emg";
mkfifo(fifo_emg, S_IRWXU);
int fd_emg = open(fifo_emg, O_RDONLY);
FILE* fp = fdopen(fd_emg, "r");
char *line = NULL;
size_t len = 0;
ssize_t _read;
printf("Both ends open. Reading commands...\n");
while ((_read = getline(&line, &len, fp)) != -1) {
printf("Comamnd: %s", line);
}
Python文件:
fifo = open("emg", "w");
while 1:
line = raw_input("ENTER COMMAND: ")
if line[0] == '!':
break
else:
fifo.write(line + '\n')
fifo.close()
当我同时运行这两个命令时,我希望C文件的输出继续
“命令:foo”
只要通过python输入输入就可以。
然而,只有在调用fifo.close()时才读入数据,并且一次读入所有数据。这并没有真正的帮助,因为我需要一个恒定的命令流 正如immibis在评论中所说,fifo.flush()解决了我的问题 您的问题来自缓冲区。FIFO默认使用块缓冲区。因此,在python中fifo的写入缓冲区满之前,c程序不会读取任何内容。有两种方法可以改变这种行为:
- 指定缓冲区模式:
fifo=open(“emg”,“w”,1)代码>而不是fifo=open(“emg”、“w”)代码>将修复。
这里的数字是1,而不是行缓冲区
- 另一种方法是强制刷新缓冲区,在写入操作后使用
fifo.flush
是。强制刷新将解决问题。在
fifo.write(…)
之后尝试fifo.flush()
,这正是我需要的!非常感谢!