2013-01-19 178 views
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)爲什麼這個程序不能正常工作(不保證計數的數量不超過50)?

2)我該如何糾正這兩個程序來做到這一點?

謝謝。

+2

首先,你應該檢查系統調用的返回值。你不知道他們是否成功。 –

+0

如何確保計數數量從未超過50?謝謝。 – tomss

+0

這裏的控制流程還不清楚。這兩個程序何時運行?他們每個人跑了多少次? –

回答

0

你確定你想做的事:的

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

代替

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

還要檢查MMAP它可能會失敗的返回值。

0

您似乎對循環感到困惑。在這種情況下,「永不」意味着你會想要一個無限循環。 while ((*count)==MAX)不是無限循環。在無限循環內,我認爲你需要確定* count是否大於50的邏輯,並從那裏開始行動。如果你努力用C語言來表達你的算法,我會建議你閱讀一本書,比如K的「C語言編程」。該書很可能以您的母語提供。