📄 queue.c
字号:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <memory.h>
#include <time.h>
int QueueCreate( key_t k )
{
if( msgget( k, IPC_EXCL | IPC_NOWAIT ) < 0
&& msgget( k, IPC_CREAT | IPC_NOWAIT | 0666 ) < 0 )
return( -1 );
return( 0 );
}
void QueueDelete( key_t k )
{
int r;
if( ( r = msgget( k, IPC_EXCL | IPC_NOWAIT ) ) >= 0 )
msgctl( r, IPC_RMID, 0 );
}
int QueueCount( key_t k )
{
int r;
struct msqid_ds s;
if( ( r = msgget( k, IPC_EXCL | IPC_NOWAIT ) ) >= 0
&& msgctl( r, IPC_STAT, &s ) == 0 )
return( s.msg_qnum );
return( -1 );
}
int QueueWrite( key_t k, long t, void *d, int s, int w )
{
int r;
char *p;
if( ( r = msgget( k, IPC_EXCL | IPC_NOWAIT ) ) >= 0
&& ( p = ( char * ) malloc( s + sizeof( long ) + 4 ) ) != NULL ){
memcpy( p, &t, sizeof( long ) );
memcpy( p + sizeof( long ), d, s );
r = msgsnd( r, p, s + sizeof( long ), ( w == 0 ) ? IPC_NOWAIT : 0 );
free( p );
if( r == 0 )
return( 0 );
}
return( -1 );
}
int QueueRead( key_t k, long *t, void *d, int s, int w )
{
int r;
char *p;
if( ( r = msgget( k, IPC_EXCL | IPC_NOWAIT ) ) >= 0
&& ( p = ( char * ) malloc( s + sizeof( long ) + 4 ) ) != NULL ){
r = msgrcv( r, p, s + sizeof( long ), *t, ( w == 0 ) ? IPC_NOWAIT : 0 );
if( r >= 0 ){
r -= sizeof( long );
memcpy( t, p, sizeof( long ) );
memcpy( d, p + sizeof( long ), s );
}
free( p );
return( r );
}
return( -1 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -