Linux 解決msgsnd 錯誤

2021-06-26 08:51:41 字數 2059 閱讀 1620

結構:

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...