0

考虑到这两个程序:

 //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)如何纠正这两个程序来做到这一点?

谢谢。

4

2 回答 2

0

你确定你想做:

while((*count)==MAX); // semicolon ?

代替

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

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

于 2013-01-19T21:49:07.897 回答
0

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

于 2013-01-20T11:02:57.690 回答