linux 查看信号量 哪个进程

linux 查看信号量 哪个进程,第1张

sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享。 sem_wait:一直阻塞等待直到信号量>0。 sem_timedwait:阻塞等待若干时间直到信号量>0。 sem_post:使信号量加1。 sem_destroy:释放信号量。...

#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_


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/134974.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-17
下一篇2023-03-17

发表评论

登录后才能评论

评论列表(0条)

    保存