【发布时间】:2018-01-11 20:22:41
【问题描述】:
我的任务是通过 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
【问题讨论】:
-
所以...“随机”还是“32K 之后”?
-
@Yunnosch 我不认为这是重复的......
-
"复制文件",以二进制模式打开。
fopen("./source","rb");加b -
您同时拥有
signal和sygnal、wait和czekaj...好的,请minimal reproducible example 或VTC。
标签: c ipc file-handling