我创建了一个只有2个字符的文本文件ab
。然后我在python中运行了一个程序(name- pytho.py),以2秒的时间间隔在文本文件中写入字符。然后我在同一个文本文件中同时运行C中的另一个程序(name-read.c),第一个程序从终端上的文本文件中读取并打印数据。无论如何它都无法读取文件中的字符。如果我删除printf语句打印'循环运行'在终端上没有打印,只是while循环继续运行。终端上read.c的输出是 -
started reading
loop running
aloop running
bloop running
�loop running
�loop running
�loop running
read.c文件是 -
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE *fp = fopen("inin.txt","r");
if(fp==NULL){
printf("file cannot be read\n");
}
int ch=0;
printf("started reading\n");
while(1){
printf("loop running\n");
ch=fgetc(fp);
printf("%c",ch);
sleep(3);
}
return 0;
}
文件pytho.py是 -
import time
tar = open('inin.txt','a')
for i in range(0,10000):
tar.write('cd')
time.sleep(2)
print("data written\n")
当我尝试使用另一个c程序而不是python程序将字符写入文件时出现同样的问题。我使用gcc作为c程序,python3作为python程序。
答案 0 :(得分:1)
TL; DR - 你在写作之前正在阅读
您正在阅读的字符可能是EOF
字符,它等于-1(整数)。我尝试使用Python 3
和Python2
一个接一个地运行这些程序,使用g++
和gcc
编译C代码。
我只能在第一个程序读取之前重现你的结果,然后第二个程序能够写任何东西 - 因此EOF。我也做了一个printf("%c", EOF)
导致相同的角色。是的,在阅读完字符后我甚至做了if (ch == EOF) printf("gotcha");
。
如果你并排运行这些程序,请考虑缓冲。当一个程序将某些内容写入文件时,它不需要。它存储在缓冲区中,如果缓冲区已满 - 那么它会将缓冲区的内容写入文件 - 因为文件访问费用很高。所以基本上你尝试阅读的字符可能仍在缓冲区中。