|
sun OS 5.8 에서 사용중인 프로세스인데 잘 되던녀석이 갑자기 안되네요...ㅠ
문제는 mtype 큐로 넘어갈때 그 뒷자리부터 땡겨져서 사라집니다.
예를들면 다음과 같습니다. 120길이의 데이터를 큐에 넣는거죠.
큐에 들어가는 구조체
int mtype;
char mdata[116];
데이터
mtype = 1011;
mdata(편의상 대충) = 'ABCDEF'
이걸 큐에 넣는데 빠져나가질 않더랍니다. (ipcs -opq해보니 들어간 프로세스는 있는데 나간 프로세스가 없습니다.)
그래서 msgrcv의 옵션을 0으로 넣어서 다 땡겨 봣더니 처음에 mtype이 들어가 있어야할 메모리의 가장 앞쪽 4byte에 ABCD가 들어가 있는겁니다. 1011을 어디론가 사라지고 ABCD가 땡겨져 있는거죠.. 자연스럽게 가장 뒤쪽 4byte는 정체를 알 수 없는 쓰레기값이 들어가 있습니다ㅠㅠ 이거 대체 왜 그런걸까요..
mtype에 ABCD가 들어가 있으니 원래 msgrcv받던 곳에서의 옵션으로는 아무것도 받을 수 없어서 큐를 내보내는 프로세스는 없었떤 것이구요.
이거 때문에 굉장히 많은 곳에서 문제를 일으키고 있습니다. ㅠㅠ....
man page에서 msgget의 mtype은 long int로 선언 되어 있어서 long int로 mtype을 선언했더니 mtype은 제대로 들어가긴 하나 버퍼사이즈를 120으로 정해서 넣었던 데이터가 128로 들어가버리는 문제 때문에 계속적인 문제를 일으켜서 이것 역시....
간밤에 무슨일이 있었던 걸까요? 큐의 권한도 바뀌지 않았고 소스의 변경도 없었고 미치겠습니다...
혹시나 하는 마음에 다른 서버에서 잘 구동되고 있는 소스를 가져와서 컴파일 했는데도 역시 같은 문제로 되지 않습니다..
다른 서버에서는 아주 잘 작동하고 있구요ㅠ. OS가 다르긴 합니다. 다른 서버들은 sun OS 5.9..
ㅠ_-초보개발자보더가 눈구경은 하지도 못하고 삼실서 썩고 있습니다....ㅠ 도움 부탁드려요~