gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:51:32 25 4
gpt4 key购买 nike

我的任务是通过 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

最佳答案

代码使用char znakint znak是最好的。

getc()返回 intunsigned char范围内和EOF 。这通常是 257 个不同的值:[-1 ... 255]。当代码读取文件source时并可能返回 255 并将其分配给 char znak , znak值为 -1,与 EOF 匹配在这种情况下。这会愚弄代码,让其认为复制已完成。因此最终可能会出现臀部 result文件。

使用int znak .

<小时/>

同样以二进制方式打开文件是source可能是一个二进制文件。

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

关于C 文件读取 getchar 在 32KB 后产生随机 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48215232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com