2013-01-19 3 views
0

고려할 때이 두 프로그램 :운영 시스템 - 프로세스

1) 왜이 프로그램이 제대로 작동하지 않습니다 (카운트 수를 초과하지 않을 것을 보장하지 않습니다

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

나는이 개 질문이 50)?

2) 어떻게 두 프로그램에서이를 수정할 수 있습니까?

감사합니다. 또한 그것은 실패 할 수의 mmap에서 반환 값을 확인

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

대신

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

의 :

+2

우선, 시스템 호출의 반환 값을 확인해야합니다. 그들이 성공했는지 여부는 정말로 알 수 없습니다. –

+0

어떻게 카운트 수가 50을 초과하지 않도록 할 수 있습니까? – tomss

+0

제어 흐름이 명확하지 않습니다. 이 두 프로그램은 언제 실행됩니까? 각각은 몇 번이나 실행됩니까? –

답변

0

당신은 물론 당신이하고 싶은.

0

루프와 관련하여 혼란스러워합니다. 단어 "never"는이 경우 무한 루프를 원한다는 것을 의미합니다. while ((*count)==MAX)은 무한 루프가 아닙니다. 무한 루프 안에서, * count가 50보다 큰지를 결정하는 논리를 원한다고 가정하고 거기에서 행동합니다. C에서 알고리즘을 표현하는 데 어려움이 있다면 K & R의 "The C Programming Language"와 같은 책을 읽는 것이 좋습니다. 이 책은 모국어로보실 수 있습니다.

관련 문제