【发布时间】:2018-01-08 17:19:01
【问题描述】:
这是我第一次直接寻求帮助。我正在尝试从文本文件中读取数据,然后使用共享内存将其发送到其他进程。共享内存按预期工作,问题是数组只填充了前 15 个字符,然后它一遍又一遍地发送这 15 个字符,直到它到达 EOF。我希望数组用文件中的新字符重新填充自己,只是不知道如何。这是我的代码的一部分。
编辑:我发现由于某种原因(可能是我的错误)填充数组后偏移量没有向前移动,所以我手动设置偏移量来移动。它解决了只读取文件的前 15 个字符的问题,但并不理想。在阅读文件时,有时会丢失一些字母,有时会切换单词的顺序。 有人可以向我解释为什么会发生这种情况,我该怎么办?
EDIT2:我想我自己解决了这个问题,下面是编辑过的代码,大部分时间看起来都很好。如果有人能想到更好的实现,请不要犹豫发布它。目前,我的解决方案似乎“足够好”
EDIT3:我仍然缺少一些字母,但我增加了共享内存空间,就像你说的那样,现在共享更长的单词实际上不是问题。
int z;
int i;
char text[256];
while(1) {
FILE* fp = fopen("/path/to/my/file", "r");
if (fp) {
fseek(fp, z, SEEK_SET);
while(fscanf(fp,"%s",text)!=EOF) {
s = shm;
for (int i = 0; i < SHM_SIZE; i++) { //this loop loads characters from array to a shared memory
*s++ = text[i];
z++;
}
}
fclose(fp); }
}
【问题讨论】:
-
请问这是什么格式?
-
我不知道现在好些了吗?
-
不!情况更糟。
-
现在完美了
-
你为什么要使用这么小的缓冲区?
fscanf会很高兴地吹过该阵列的末端。您可能正在寻找fread。