考虑这两个程序:
//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)我如何纠正这两个程序才能做到这一点?
谢谢。
发布于 2013-01-20 05:49:08
您确定要执行以下操作:
while((*count)==MAX); // semicolon ?而不是
while(*count==MAX)
(*count)++;还要检查mmap的返回值,它可能会失败。
发布于 2013-01-20 19:02:58
您似乎对循环感到困惑。在这种情况下,“从不”这个词意味着你想要一个无限循环。while ((*count)==MAX)不是无限循环。在无限循环中,我假设您需要确定*count是否大于50的逻辑,并从那里开始执行操作。如果你正在努力用C语言表达你的算法,我建议你读一本书,比如K&R的“C编程语言”。这本书很可能有您的母语版本。
https://stackoverflow.com/questions/14418831
复制相似问题