用共享内存从文件中读取
C++ Read from file with shared memory
我写了2个程序,第一个程序使用字符和字符串大小的两个变量创建共享内存。而另一个程序则读取共享变量。
我的问题:我试图让我的程序读取文本文件中的所有单词,但我不能这样做,所以我让我的程序读取1个单词。我怎样才能使它在文件中的所有单词。
要读取文件,该区域
if (file1.is_open())
{
file1>> word;//read word from file to know size of word $$ read first char into shm ->str
shm->size=word.length();
strcpy(str2, word.c_str());
shm ->str=str2[0];
file1<<" ";
}
应该更接近
while(file1>> word)
{
shm->size=word.length();
shm ->str=word[0];
}
我去掉了strcpy
,因为它似乎不需要,还有file1<<" ";
,因为尝试写ifstream只会带来痛苦。默认情况下,ifstream支持的文件为只读打开,不能写入。如果必须写入,则在open call上使用fstream和specify std::fstream::in | std::fstream::out
。在读取文件时,您可能需要仔细考虑打算如何写入文件。
当前shm将被找到的每个单词覆盖。这可能不是你想要的。我猜你想要的更像是:
- 打开文件
- 等待轮到
- 从文件 读取
- 更新shmem
- goto 2
sharedBoundary->turn==0
file1.open ("file1.txt");
while(file1>> word)
{
while(sharedBoundary->turn==1);
shm->size=word.length();
shm ->str=word[0];
sharedBoundary->turn=1;
}
我不明白shareboundary标志和turn的意义,除非有更重要的保护逻辑我们没有显示,所以我去掉了标志来简化示例。我的用法可能不正确,所以要适应口味。
项目2。为了与程序1同步,您需要这样做:
sharedBoundary->turn==0
while(/* unspecified termination logic */)
{
while(sharedBoundary->turn==0);
cout<<"The new values stored in the shared memory:n";
cout<<"Text="<<shm ->str<<"nSize="<<shm->size<<"n";
PrintCharNtimes(shm ->str, shm->size);
sharedBoundary->turn=0;
}
相关文章:
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 读取文件的最后一行并输入到链接列表时出错
- 为什么在读取文件大小时文件IO速度会发生变化
- 读取文件时运行时的未知行为
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C++ 读取文件读取文件不正确
- 读取文件并将其存储在unordered_map中时出现问题
- 读取文件时无法使用 OpenMP 获得加速
- 使用istringstearm和get行缓慢读取文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 读取文件时引发异常
- 从标准输入读取文件后读取用户输入
- 在读取文件后重置句柄
- 如何在C++编译时读取文件?
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 读取文件在第二次调用时返回INVALID_HANDLE
- 通过指针读取文件
- 逐行读取文件,并将数据插入变量和数组中