用共享内存从文件中读取

C++ Read from file with shared memory

本文关键字:读取 文件 共享 内存      更新时间:2023-10-16

我写了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将被找到的每个单词覆盖。这可能不是你想要的。我猜你想要的更像是:

  1. 打开文件
  2. 等待轮到
  3. 从文件
  4. 读取
  5. 更新shmem
  6. 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;     
}