메시지 큐에대해 질문 드립니다....
글쓴이: lhs8421478 / 작성시간: 수, 2013/04/24 - 9:59오전
안녕하세요 C언어를 공부중인 사람입니다...
현재 메시지 큐를 이용해서 프로세스간 통신으로 리스트 검색을 하려고 합니다.
서버는 파일에서 data를 읽어 들여 링크드리스트를 구현해서 가지고 있고.
클라이언트는 검색할 방법과 검색할 단어를 입력해서 메시지큐 구조체를 서버로 전송합니다.
서버는 메시지큐를 읽어서 링크드 리스트를 검색하는것이지요...
현재 막힌부분은 서버가 메시지를 읽긴 하는데.. 꼭 한번은 건너 뛰고 읽고 있습니다...
처음 전송된 메시지큐는 읽지 못하고 두번째꺼는 읽어서 검색을 하고... 세번째꺼는 읽지 못하고 건너 뛰고
네번째는 읽어서 검색을 하고.. 이런식으로 진행이 되고 있습니다... 도무지 어디가 문제인지 몰라서 이렇게 글을 올립니다 ㅠㅠ
typedef struct _msg_buf { int search_code; char mtext[MAX_LENGTH]; }msg_buf_t;
메시지큐 구조체 입니다...
int msg_send(int msgq_id, msg_buf_t *msg) { int len; if((len = strlen(msg->mtext)) > MAX_LENGTH){ perror("req msg is too long"); exit(1); } if (msgsnd(msgq_id, msg, len, 0) == -1) { perror("msg send failed."); return -1; } printf("len : %d \t msg_buf_t : %d\n", len, sizeof(msg_buf_t)); return 0; }
클라이언트에서 메시지를 보내는 부분입니다....
int msg_receive(int msgq_receive_id, msg_buf_t *msg, list_buf_t *head) { int indentifier; indentifier = msgrcv(msgq_receive_id, msg, MAX_LENGTH, 0, MSG_NOERROR); if (indentifier == -1){ printf("메시지 큐 수신 실패"); return -1; } printf("\n---> search_code: %ld content: %s\n", msg->search_code, msg->mtext); list_search(msg, head); return 1; }
서버에서 메시지큐를 읽는 부분입니다...
왜 건너띄면서 읽는지 도무지 모르겠습니다 ㅠㅠ 도움 부탁 드립니다...
Forums:
저도 잘 모르지만. ㅡ_ㅡ;; 궁시렁 궁시렁...
http://blog.naver.com/nds239?Redirect=Log&logNo=10138526797
http://kldp.org/node/122901 이걸 보면... 버퍼 초기화'도 필요해 보이구요... 할것이 많네요. ㅇ_ㅇ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
말씀 하신대로....
우선은 구조체 텍스트 초기화는 memset이용해서 해주었고요...
사이즈를 그냥 sizeof(msg_buf_t)만큼으로 전송을 해주는걸로 바껐습니다...
근데도 역시나... 마창가지로 건너 뛰네요 ㅠㅠ 더 공부를 해봐야 할것 같습니다 ㅠㅠ
알려주신 내용을 토대로 좀더 공부를 해봐야 할것 같습니다 ㅠㅠ
메시지 큐는 이렇게 생겼다고 합니다.
ㅇ_ㅇ;; 그냥 생각나서요.
http://i-bada.blogspot.kr/2012/04/blog-post_2886.html
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
msgsnd에 문제가 있을 수 있네요
msgsnd를 할 때 2번째 인수인 msg에 메시지 타입은 항상 양수가 지정되어야 합니다.
위 코드만 보면 메시지 타입(search_code)에 아무 값도 지정하지 않는 것 같은데,
만일 양수가 아닌 경우라면 메시지 송신이 실패합니다.
========================================
* The truth will set you free.
search_code는 ...
양수의 값을 넣어 주고 있습니다....
크... 문제점을 열심히 알아보고 있습니다 ㅠㅠ
ㅡ_ㅡ;;
헛갈리네요.. 도통 뭐가 문제인지... ㅡ_ㅡ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
송수신
서버측 수신받은 데이터 크기, 내용
클라측 송신한 데이터 크기, 내용 확인해보시고
일치하면... 로직상으로
서버측에서 잘못처리하는거같은뎅
아니면 큐버퍼가 다 차서 그럴수도있구여
댓글 달기