Я новичок в программировании на Linux. Я пытаюсь реализовать очередь сообщений в одном из своих заданий. Но я не могу этого сделать. Код выглядит следующим образом:
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <linux/sched.h>
#include <stdlib.h>
#include <string.h>
typedef long MSISDN;
typedef struct
{
long mtype;
long mtext;
}msgbuf;
void init(int qid,int key) {
qid = msgget(key,IPC_CREAT|0666);
}
void sendMsg(long t_ype, long buf, int len, int qid) {
int length = sizeof(long) + sizeof(MSISDN);
msgbuf *p = malloc(length);
p->mtype = t_ype;
fputc('2',stderr);
void* tosend = (void*) buff;
fputc('3',stderr);
memcpy(p->mtext,tosend,length);
fputc('4',stderr);
msgsnd(qid,p,length,IPC_NOWAIT);
free(p);
}
void main()
{
int qid;
int key = 1111;
int len= sizeof(MSISDN);
long type_1=1;
long send = 12345;
init(qid,key);
fputc('1',stderr);
sendMsg(type_1,send,len,qid);
getchar();
}
Проблема в том, что memcpy
не работает. Получаю предупреждение:
.предупреждение: передача аргумента 1 «memcpy» делает указатель из целого числа без приведения [включено по умолчанию]
Также, когда я запускаю код, он получает сигнал SIGSEGV в memcpy. Думаю, я неправильно понимаю приведение типов.