gpt4 book ai didi

C++使用共享内存从文件中读取

转载 作者:行者123 更新时间:2023-11-30 05:43:19 26 4
gpt4 key购买 nike

我写了 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 支持的文件已打开为只读且无法写入。如果必须写入,请使用 fstream 和 specify std::fstream::in | std::fstream::out在公开电话 session 上。您可能需要仔细考虑在读取文件时打算如何写入文件。

目前 shm 将被找到的每个单词覆盖。这可能不是您想要的。我怀疑你在寻找更像的东西:

  1. 打开文件
  2. 等待轮到
  3. 从文件中读取
  4. 更新shmem
  5. 设置其他人的回合
  6. 转到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;
}

我看不出 sharedBoundary 标志和 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;
}

关于C++使用共享内存从文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30272587/

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