两个读取和附加程序在同一文本文件上提供无法识别的输出

时间:2017-04-29 09:38:22

标签: python c

我创建了一个只有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程序。

1 个答案:

答案 0 :(得分:1)

TL; DR - 你在写作之前正在阅读

您正在阅读的字符可能是EOF字符,它等于-1(整数)。我尝试使用Python 3Python2一个接一个地运行这些程序,使用g++gcc编译C代码。

我只能在第一个程序读取之前重现你的结果,然后第二个程序能够写任何东西 - 因此EOF。我也做了一个printf("%c", EOF)导致相同的角色。是的,在阅读完字符后我甚至做了if (ch == EOF) printf("gotcha");

重要的:

如果你并排运行这些程序,请考虑缓冲。当一个程序将某些内容写入文件时,它不需要。它存储在缓冲区中,如果缓冲区已满 - 那么它会将缓冲区的内容写入文件 - 因为文件访问费用很高。所以基本上你尝试阅读的字符可能仍在缓冲区中。