Я использую именованный канал FIFO для связи между C (числа, генерирующие цикл - C) и python (прослушивание числа, сгенерированного C, и чтение их, и их обработка). Код работает хорошо, за исключением каждого сгенерированного числа в C. Мне нужно закрыть fifo, чтобы увидеть его в Python, иначе он не будет отображаться в Python, пока не будет вызвана команда закрытия. Я не знаю, является ли открытие и закрытие FIFO хорошей идеей для правильного чтения в коде Python или нет. Я должен отметить, что код C генерирует число каждые 50 миллисекунд. Вот почему я сомневаюсь, что открытие и закрытие - хорошая идея или нет. Вот мои коды на C и Python:
C как сервер:
while (1){
t=time_in_ms();
if (t-t0>=50){
t0=t;
flag=1;
}
else{
flag=0;
}
if (flag==1){
flag=0;
printf("%lld %lld\n",count,t);
count+=1;
fprintf(f,"%lld\r",t);
fflush(f);
fclose(f);
f=fopen("fifo","w");
}
}
И код на Python в качестве клиента:
with open(FIFO) as fifo:
print("FIFO opened")
while True:
data = fifo.read()
if len(data) == 0:
count=count+1
else:
count=0
if count>2000:
print("Writer closed")
break
print data
x=x+1
open/write
на стороне C иos.open/os.read
на стороне python! - person Antti Haapala   schedule 12.11.2017man 2 open
man 2 write
Также обратите внимание на:man 3 fflush
При работе с C страницы руководства в Linux являются прекрасным и отличным ресурсом. - person David Bern   schedule 12.11.2017write
или dprintf. Я должен добавить, что я никогда раньше не использовал dprintf и просто размышлял о поведении - person David Bern   schedule 12.11.2017file.read
будет пытаться читать до EOF. Одним из вариантов было бы использованиеreadline
, но это не значит, что это было бы полностью без проблем. - person Antti Haapala   schedule 12.11.2017