Я пытаюсь создать канал FIFO между файлом-питоном и файлом C, но проблема в том, что при чтении на входе из файла C, getline блокирует до конца записи (в файле python) закрывается.Трубка FIFO считывается только после того, как конец записи закрыт
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 _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, чтобы перейти "Command: Foo" как только он вводится через вход python. Однако данные считываются только тогда, когда вызывается fifo.close(), и он просто считывается сразу. Это не очень полезно, так как я хочу постоянный поток команд.
Попробуйте 'fifo.flush()' после 'fifo.write (...)' – immibis
Это именно то, что мне нужно! Спасибо! – arahoomam