如何在linux下看消息队列是否存在
1个回答
展开全部
#include
#include
#include
#include types.h>
#include msg.h>
#include
#include ipc.h>
void msg_show_attr(int msg_id, struct msqid_ds msg_info)
{
int ret = -1;
sleep(1);
ret = msgctl(msg_id, IPC_STAT, &msg_info);
if( -1 == ret)
{
printf(获消息信息失败\n);
return ;
}
printf(\n);
printf(现队列字节数:%d\n,msg_info.msg_cbytes);
printf(队列消息数:%d\n,msg_info.msg_qnum);
printf(队列字节数:%d\n,msg_info.msg_qbytes);
printf(发送消息进程pid:%d\n,msg_info.msg_lspid);
printf(接收消息进程pid:%d\n,msg_info.msg_lrpid);
printf(发送消息间:%s,ctime(&(msg_info.msg_stime)));
printf(接收消息间:%s,ctime(&(msg_info.msg_rtime)));
printf(变化间:%s,ctime(&(msg_info.msg_ctime)));
printf(消息UID:%d\n,msg_info.msg_perm.uid);
printf(消息GID:%d\n,msg_info.msg_perm.gid);
}
int main(void)
{
int ret = -1;
int msg_flags, msg_id;
key_t key;
struct msgmbuf{
int mtype;
char mtext[10];
};
struct msqid_ds msg_info;
struct msgmbuf msg_mbuf;
int msg_sflags,msg_rflags;
char *msgpath = /ipc/msg/;
key = ftok(msgpath,’a');
if(key != -1)
{
printf(功建立KEY\n);
}
else
{
printf(建立KEY失败\n);
}
msg_flags = IPC_CREAT;
msg_id = msgget(key, msg_flags|0666);
if( -1 == msg_id)
{
printf(消息建立失败\n);
return 0;
}
msg_show_attr(msg_id, msg_info);
msg_sflags = IPC_NOWAIT;
msg_mbuf.mtype = 10;
memcpy(msg_mbuf.mtext,测试消息,sizeof(测试消息));
ret = msgsnd(msg_id, &msg_mbuf, sizeof(测试消息), msg_sflags);
if( -1 == ret)
{
printf(发送消息失败\n);
}
msg_show_attr(msg_id, msg_info);
msg_rflags = IPC_NOWAIT|MSG_NOERROR;
ret = msgrcv(msg_id, &msg_mbuf, 10,10,msg_rfla
共享内存示例代码:
#include
#include sem.h>
#include ipc.h>
#include
typedef int sem_t;
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
} arg;
sem_t CreateSem(key_t key, int value)
{
union semun sem;
sem_t semid;
sem.val = value;
semid = semget(key,value,IPC_CREAT|0666);
if (-1 == semid)
{
printf(create semaphore error\n);
return -1;
}
semctl(semid,0,SETVAL,sem);
return semid;
}
/*
struct sembuf{
ushort sem_num;
short sem_op;
short sem_flg;
};
*/
void SetvalueSem(sem_t semid, int value)
{
union semun sem;
sem.val = value;
semctl(semid,0,SETVAL,sem);
return ;
}
int GetvalueSem(sem_t semid)
{
union semun sem;
return semctl(semid,0,GETVAL,sem);
return sem.val;
}
void DestroySem(sem_t semid)
{
union semun sem;
sem.val = 0;
semctl(semid,0,IPC_RMID,sem);
}
int Sem_P(sem_t semid)
{
struct sembuf sops={0,+1,IPC_NOWAIT};
return (semop(semid,&sops,1));
}
int Sem_V(sem_t semid)
{
struct sembuf sops={0,-1,IPC_NOWAIT};
return (semop(semid,&sops,1));
}
static char msg[]=共享内存\n;
int main(void)
{
key_t key;
int semid,shmid;
char i,*shms,*shmc;
struct semid_ds buf;
int value = 0;
char buffer[80];
pid_t p;
key = ftok(/ipc/sem/,’a');
shmid = shmget(key,1024,IPC_CREAT|0604);
semid = CreateSem(key,1);
p = fork();
if(p > 0)
{
/* 父进程 */
/* 建立共享内存 */
shms = (char *)shmat(shmid,0,0);
memcpy(shms, msg, strlen(msg)+1);
sleep(10);
Sem_P(semid);
shmdt(shms);
DestroySem(semid);
}
else if(p == 0)
{
shmc = (char *)shmat(shmid,0,0);
Sem_V(semid);
printf(共享内存值:%s\n,shmc);
shmdt(sg_
#include
#include
#include types.h>
#include msg.h>
#include
#include ipc.h>
void msg_show_attr(int msg_id, struct msqid_ds msg_info)
{
int ret = -1;
sleep(1);
ret = msgctl(msg_id, IPC_STAT, &msg_info);
if( -1 == ret)
{
printf(获消息信息失败\n);
return ;
}
printf(\n);
printf(现队列字节数:%d\n,msg_info.msg_cbytes);
printf(队列消息数:%d\n,msg_info.msg_qnum);
printf(队列字节数:%d\n,msg_info.msg_qbytes);
printf(发送消息进程pid:%d\n,msg_info.msg_lspid);
printf(接收消息进程pid:%d\n,msg_info.msg_lrpid);
printf(发送消息间:%s,ctime(&(msg_info.msg_stime)));
printf(接收消息间:%s,ctime(&(msg_info.msg_rtime)));
printf(变化间:%s,ctime(&(msg_info.msg_ctime)));
printf(消息UID:%d\n,msg_info.msg_perm.uid);
printf(消息GID:%d\n,msg_info.msg_perm.gid);
}
int main(void)
{
int ret = -1;
int msg_flags, msg_id;
key_t key;
struct msgmbuf{
int mtype;
char mtext[10];
};
struct msqid_ds msg_info;
struct msgmbuf msg_mbuf;
int msg_sflags,msg_rflags;
char *msgpath = /ipc/msg/;
key = ftok(msgpath,’a');
if(key != -1)
{
printf(功建立KEY\n);
}
else
{
printf(建立KEY失败\n);
}
msg_flags = IPC_CREAT;
msg_id = msgget(key, msg_flags|0666);
if( -1 == msg_id)
{
printf(消息建立失败\n);
return 0;
}
msg_show_attr(msg_id, msg_info);
msg_sflags = IPC_NOWAIT;
msg_mbuf.mtype = 10;
memcpy(msg_mbuf.mtext,测试消息,sizeof(测试消息));
ret = msgsnd(msg_id, &msg_mbuf, sizeof(测试消息), msg_sflags);
if( -1 == ret)
{
printf(发送消息失败\n);
}
msg_show_attr(msg_id, msg_info);
msg_rflags = IPC_NOWAIT|MSG_NOERROR;
ret = msgrcv(msg_id, &msg_mbuf, 10,10,msg_rfla
共享内存示例代码:
#include
#include sem.h>
#include ipc.h>
#include
typedef int sem_t;
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
} arg;
sem_t CreateSem(key_t key, int value)
{
union semun sem;
sem_t semid;
sem.val = value;
semid = semget(key,value,IPC_CREAT|0666);
if (-1 == semid)
{
printf(create semaphore error\n);
return -1;
}
semctl(semid,0,SETVAL,sem);
return semid;
}
/*
struct sembuf{
ushort sem_num;
short sem_op;
short sem_flg;
};
*/
void SetvalueSem(sem_t semid, int value)
{
union semun sem;
sem.val = value;
semctl(semid,0,SETVAL,sem);
return ;
}
int GetvalueSem(sem_t semid)
{
union semun sem;
return semctl(semid,0,GETVAL,sem);
return sem.val;
}
void DestroySem(sem_t semid)
{
union semun sem;
sem.val = 0;
semctl(semid,0,IPC_RMID,sem);
}
int Sem_P(sem_t semid)
{
struct sembuf sops={0,+1,IPC_NOWAIT};
return (semop(semid,&sops,1));
}
int Sem_V(sem_t semid)
{
struct sembuf sops={0,-1,IPC_NOWAIT};
return (semop(semid,&sops,1));
}
static char msg[]=共享内存\n;
int main(void)
{
key_t key;
int semid,shmid;
char i,*shms,*shmc;
struct semid_ds buf;
int value = 0;
char buffer[80];
pid_t p;
key = ftok(/ipc/sem/,’a');
shmid = shmget(key,1024,IPC_CREAT|0604);
semid = CreateSem(key,1);
p = fork();
if(p > 0)
{
/* 父进程 */
/* 建立共享内存 */
shms = (char *)shmat(shmid,0,0);
memcpy(shms, msg, strlen(msg)+1);
sleep(10);
Sem_P(semid);
shmdt(shms);
DestroySem(semid);
}
else if(p == 0)
{
shmc = (char *)shmat(shmid,0,0);
Sem_V(semid);
printf(共享内存值:%s\n,shmc);
shmdt(sg_
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询