結構:
typedef struct _msgque_msgque;
一、建立:
course_data_msgid = r_msg_create_u(msgid_data_key + cond->roomid);
if(course_data_msgid < 0)
ret = set_msgquen_info(course_data_msgid , 8192);
if(ret == -1)
int qbyte = 0;
int qnum = 0;
get_msgquen_info(course_data_msgid, &qbyte, &qnum);
nslog(ns_warn, "qbyte:[%d] qnum:[%d]", qbyte, qnum);
二、傳送:
static int record_send_msg(const unsigned int msg_fd,const unsigned int steam_type,const char* pdata,const media_info_t stream)
int ret=0;
msgque msg;
parse_data_t* msg_payload =(unsigned char*)malloc(sizeof(parse_data_t));
if(null ==msg_payload )
msg_payload->data = (unsigned char*)malloc(stream.data_len);
if(null == msg_payload->data )
msg_payload->data_len = stream.data_len;
r_memset(msg_payload->data, 0, sizeof(stream.data_len));
r_memset(&msg, 0, sizeof(msgque));
memcpy(msg_payload->data,pdata,stream.data_len);
msg_payload->width = stream.width;
msg_payload->height = stream.height;
msg_payload->data_type = stream.data_type;
msg_payload->flags = stream.iframe;
msg_payload->time_tick = stream.time_tick;
msg_payload->sindex = stream.sindex;
msg.msgtype = msg_payload->sindex+1;
msg.msgbuf = msg_payload;
ret = r_msg_send(msg_fd,&msg, sizeof(msgque)-sizeof(long) ,ipc_nowait);
if(ret <0)
nslog(ns_error,"sindex=%d -moive=%d,fd=%d--errno=%d,<%s>\n",msg_payload->sindex ,stream.moive_res,msg_fd, errno,strerror(errno));
free( msg_payload->data);
msg_payload->data=null;
free(msg_payload);
msg_payload=null;
}return ret;
}三、接收:
static int get_media_bufinfo(mp4_record_t *mr, parse_data_t *buf_info)
return -1;
}r_memcpy(buf_info, msgp.msgbuf, sizeof(parse_data_t));
r_free(msgp.msgbuf);
return 0;
}反覆出現傳送報錯:invalid argument,後來在查訊息佇列的文件時,發現msgpue的第乙個引數msgtype必須大於0,而sindex是從零值開始。順便解決此問題
linux基礎程式設計 訊息佇列 msgsnd
實際上,訊息佇列常常儲存在鍊錶結構中。擁有許可權的程序可以向訊息佇列中寫入或讀取訊息。訊息佇列本身是非同步的,它允許接收者在訊息傳送很長時間後再取回訊息,這和大多數通訊協議是不同的。例如www中使用的http協議是同步的,因為客戶端在發出請求後必須等待伺服器回應。然而,很多情況下我們需要非同步的通訊...
Linux指令碼執行錯誤解決
問題描述 產生原因 由於linux和windows之間對換行符的定義不一致,linux下為0x0a,windows下為0x0d 0x0a,當shell指令碼使用windows格式儲存時,執行指令碼會出現上述錯誤。檢查方法 使用vi開啟腳步檔案,在命令模式下輸入 set ff?檢視檔案格式,如果出現f...
linux錯誤列表及解決辦法
編譯cpp檔案沒問題,執行時出現 段錯誤 核心以轉儲 報錯如圖 program received signal sigsegv,segmentation fault.0x00007ffff7b69bb instd cxx11 basic string,std char traits.std allo...