首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统-进程

操作系统-进程
EN

Stack Overflow用户
提问于 2013-01-20 05:03:30
回答 2查看 87关注 0票数 0

考虑这两个程序:

代码语言:javascript
复制
 //in  
 #define MAX 50
 int main(int argc, char* argv[]) {
     int *count;
     int fd=shm_open("/count",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
     int ret=ftruncate(fd,sizeof(int));
     count=mmap(0,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

     while ((*count)==MAX);
     (*count)++;
 }

  //out 
  int main(int argc, char* argv[]) {
      int *count;
      int fd=shm_open("/count",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
      int ret=ftruncate(fd,sizeof(int));

      count=mmap(0,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

      (*count)--;
 }

我有两个问题:

1)为什么这个程序不能正常工作(不能保证count的数量不超过50)?

2)我如何纠正这两个程序才能做到这一点?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-01-20 05:49:08

您确定要执行以下操作:

代码语言:javascript
复制
while((*count)==MAX); // semicolon ?

而不是

代码语言:javascript
复制
    while(*count==MAX)
       (*count)++;

还要检查mmap的返回值,它可能会失败。

票数 0
EN

Stack Overflow用户

发布于 2013-01-20 19:02:58

您似乎对循环感到困惑。在这种情况下,“从不”这个词意味着你想要一个无限循环。while ((*count)==MAX)不是无限循环。在无限循环中,我假设您需要确定*count是否大于50的逻辑,并从那里开始执行操作。如果你正在努力用C语言表达你的算法,我建议你读一本书,比如K&R的“C编程语言”。这本书很可能有您的母语版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14418831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档