2012-09-27 5 views
1

나는 그것이 하나의 항상 대부분의 경우 8. 일부 배수 인 변수 shmsz에 따라 공유 메모리의 일부 금액을 할당하려고 시도하고 8공유 메모리가 할당되지 않았습니까?

(16) 다음 코드를 사용 :

// allocate shared memory 
if ((shmid = shmget(IPC_PRIVATE, shmsz, IPC_CREAT | 0666)) < 0) { 
    printf("Could not allocate shared memory.\n"); 
    exit(1); 
} 

이것은 매력처럼 작동하는 데 사용됩니다. 그러나 지금은 입니다. 항상입니다. 오류 메시지가 나타나고 프로그램이 종료됩니다.

편집 : errno() 쇼 "버스 오류 : 10"때때로

+1

호출이 실패했을 때'errno'의 값을 살펴 보는 것은 어떨까요 ... –

+1

그리고'errno'는 무엇을 말합니까? –

+0

편집 : 사과, 오류는 다음을 보여줍니다 :'버스 오류 : 10'하지만이 모든 것에 익숙하지 않아서 무엇을해야할지 모르겠습니다. –

답변

0

(예 : 당신은 읽기 전용 공유 메모리에 쓰기를 시도하는 등) 공유 메모리에 액세스 위반이있을 때 프로세스는 SIGSEGV 또는 SIGBUS을받습니다.

이 경우 0666을 사용하여 생성 할 때 가능한 상황은 하나뿐입니다. 따라서 공유 메모리에서 코드를 실행하려고합니까?

관련 문제