繁体   English   中英

C文件读取getchar在32KB之后产生随机EOF

[英]C File read getchar yields random EOF after 32KB

我受命在ipc共享内存上进行文件复制。 问题是getc在32k字符后随机产生EOF。

FILE* file;
int znak;

file = fopen("./source","r");

if(file != NULL)
{
    while(feof(file) == 0)
    {
        znak = getc(file);

        if(znak != EOF)
        {
            czekaj(0);
            *adres = znak;

            sygnal(1);
        }
    }

    wait(0);        //Wait for your turn
    *adres = EOF;
    signal(1);      //Let other process go
}

根据要求撰写部分

int znak
FILE *plik;
plik = fopen("./plik_klient", "w");
fclose(plik);

.....



plik = fopen("./result","a");


if(plik != NULL)
{
    while(znak != EOF)
    {

        wait(1);        //Opuszczenie semafora

        znak=*adres;

        if(znak != EOF)
        {
            fputc(znak,plik);

            signal(0);
        }

    }
}

作为工作的结果,其他进程将读取该信息并将其写入文件。

-rw-r--r--. 1 ficekba inf-17   32769 01-11 21:15 result
-rw-r--r--. 1 ficekba inf-17 1000000 01-11 21:13 source

如您所见,结果文件恰好具有32k

int znak最佳时,代码使用char znak

getc()返回一个int是否在范围内unsigned charEOF 通常,这是257个不同的值:[-1 ... 255]。 当代码读取文件source并可能返回255并将其分配给char znakznak的值为-1,在这种情况下与EOF匹配。 这使代码误认为完成复制。 因此可能最终得到一个result文件。

使用int znak


同样以二进制模式打开文件,则source可能是二进制文件。

// file = fopen("./source","r");
file = fopen("./source","rb");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM