在监控程序中可以随时查看共享内存的信息~
#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
main()
{
while(1)
{
int i = 0;
int shm_id;
key_t key;
char* shm;
char* name = "/dev/shm/myshm1";
key = ftok(name,0);
if(key == -1)
{
//perror("ftok error");
}
shm_id = shmget(key,1000,IPC_CREAT);
if(shm_id == -1)
{
perror("shmget error");
return 0;
}
shm = (char*)shmat(shm_id,NULL,0);
if(strlen(shm)!=0)
{
std::cout<< shm << std::endl;
while(i<1000)
{
*(shm+i)='\0';
i++;
}
}
}
}
但是问题也来了~,如果总是while(1)来循环的话~会占用资源的~一旦用户数量多的话~就会崩溃了~
请问,用什么办法来控制,做到有消息就运行,没消息就sleep,请具体说明,谢谢了~
----------------解决方案--------------------------------------------------------
看到网上下载的监控软件~有消息时~占用CPU资源,没消息时占0%,可是不明白人家是通过啥唤醒自己的程序的进程的~
总不能把唤醒写到自己的服务器端把~一脑袋雾水了~求救~!
----------------解决方案--------------------------------------------------------
没人写过关于监控进程的程序吗?
system v里有消息队列~共享内存的知识~关键是现在不能把SLEEP和即时监控问题还没想明白~
而且,SEVER端的程序应该不为监控程序提供帮助才对(通过服务器程序来唤醒),有明白的高人请指点下把~谢谢~
----------------解决方案--------------------------------------------------------
在while(1)后sleep1秒吧,这样至少就不会出现cpu一直占着了
----------------解决方案--------------------------------------------------------
感觉没有线程的话,用C是做不了的.
----------------解决方案--------------------------------------------------------
就是各进程之间要相互通信.
----------------解决方案--------------------------------------------------------
感谢您的回复~
问题是这样解决的.
SYSTEM V里的共享内存可能会造成数据丢失,我们已经改为消息队列了(message queque)了,也是用while(1)循环监控
和共享内存的区别在于,共享内存是一直去看共享那部分内存里存放的数据,而消息队列中的msgrcv()是阻塞形式的~如果没人msgsnd()传递消息的话~就会一直等待~这样就不会占用CUP了~HOHO~
----------------解决方案--------------------------------------------------------