0

この 2 つのプログラムを考慮すると、次のようになります。

 //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)--;
 }

2 つの質問があります。

1) このプログラムが正しく動作しないのはなぜですか (カウント数が 50 を超えないことが保証されていません)。

2) 2 つのプログラムを修正するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

0

ループに関して混乱しているようです。この場合、「決して」という言葉は、無限ループが必要であることを意味します。while ((*count)==MAX)無限ループではありません。無限ループ内では、*count が 50 より大きいかどうかを判断し、そこから動作するロジックが必要になると思います。アルゴリズムを C で表現するのに苦労している場合は、K&R の「The C Programming Language」などの本を読むことをお勧めします。その本はおそらくあなたの母国語で入手できます。

于 2013-01-20T11:02:57.690 に答える
0

あなたは確かにやりたい:

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

それ以外の

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

また、失敗している可能性がある mmap からの戻り値を確認してください。

于 2013-01-19T21:49:07.897 に答える