第44讲

来源:互联网 发布:软件如何防止破解 编辑:程序博客网 时间:2024/05/22 11:42
今日结果:(消息队列, 共享内存)
1  int msgget(key_t key, int msgflg);   //创建消息队列,    自己设置的键值,    权限
    ipcs    // 查询消息队列;    ipcrm  -q  标识码   // shell 删除消息队列
    一台主机上最多只能添加16个消息队列
     int msgsnd(int msqid, const  void * msg_ptr,  size_t msg_sz, int msgflg); //   发送消息函数
int msgrcv( int msqid , void *msg_ptr, size_t msg_sz,  long int msgtype, int msgflg);  // 接收消息函数
消息大小(默认单位字节) 消息类型>=0        处理方式(0 等待,IPC_NOWAIT )
一个数据块最多只能放 8k 的数据
struct mymsg{
long message_type; //   消息类型>=1(不能等于0)
char msgdata[100];
};
int msgctl(int msqid, int cmd, struct msqid_ds *buf); //   消息队列处理函数
2 共享内存 : 几个进程共享一块内存(地址映射)
shmat(...);   / 给当前进程建立内存映射关系
shmdt(...);  // 删除当前进程的内存映射关系
int shmget( key_t key, size_t size, int shmflg); //  创建共享内存的函数
在内核文件下:cat shm*    //查询多个文件内容的和
ipcrm  -m   标识码   // 删除共享内存
memcpy( addr, buf ,strlen(buf));     // 往共享内存中些数据的函数, 也可已进行读取数据
int shmctl(...);   // 共享内存处理函数
在结构体 struct shmid_ds 中,  shm_cpid // 创建者的PID, shm_segsz // 共享内存的大小
memcpy( (char*) addr + sizeof(s) * i , &s  , sizeof(s));//   必须进行类型强转地址才能加减(表示地址偏移),  传入结构体对象,  结构体大小;     strlen () 不能计算结构体大小


明日计划: 完成老师分派的共享内存,消息队列,信号量,的一个综合应用题,然后自己去消息linux内核的相关知识,预习tcp/ip, 套接字的相关知识。


感想:自己现在的忘性还那么的好,学过的东西,也遗忘的很快,看来到最后还要再次进行好好的复习。合理安排时间,找合适的方法做自己想做的事。说这么多,剩下的就是做。
0 0