os send,receive 实现
来源:互联网 发布:sketch mac汉化破解版 编辑:程序博客网 时间:2024/06/07 03:45
union SIGNAL* alloc(unsigned int size, unsigned int sigNo) -----------就没有free过,只是一个sigNo,从req变成rsp。内容填写的不同。message 类型填写的不同而已.
{
_signal* sigMgt;
union SIGNAL* sig;
sigMgt = (_signal*)malloc(sizeof(_signal) + size);
sigMgt->sender_id = currentPid;
sigMgt->dest_id = currentPid;
sigMgt->size = size;
//这样搞的目的是sig给user用。sigMgt是os用的。隐藏了一些info
//根据sigMgt struct 是3个整数,+1,这样偏移3个整数的位置。然后强制转化成1个整数的指针。在加1就是1个指针的位移了
sig = (union SIGNAL*)(sigMgt + 1);
sig->sigNo = sigNo;
memAlloc++;
return sig;
}
void free_buf(union SIGNAL** psig)
{
if (*psig == NULL)
{
redundant_free(psig);
return;
}
if (memAlloc == 0)
{
printf("\n*********MEMORY ALLOC/FREE Error ***********\n");
CPPUNIT_ASSERT(0);
return;
}
memAlloc--;
//和alloc 匹配,所以要-1
//虽然psig是1个整数大小。但是强制转成了3个整数大小的struct。然后-1,这样就回退3个整数大小的space
_signal* sigMgt = ((_signal*) *psig) - 1;
free(sigMgt);
*psig = NULL;
}
void send(union SIGNAL** psig, PROCESS p)
{
union SIGNAL* sig = *psig;
#ifdef SIG_CLONE
sig = sig_clone_and_free(sig);
#endif
pthread_mutex_lock(&sigqueue_mutex);
_signal* sigMgt = ((_signal*) sig) - 1;
sigMgt->dest_id = p;
sigMgt->sender_id = currentPid;
sig_queues[p].push_back(sigMgt);
*psig = NULL;
pthread_mutex_unlock(&sigqueue_mutex);
}
{
_signal* sigMgt;
union SIGNAL* sig;
sigMgt = (_signal*)malloc(sizeof(_signal) + size);
sigMgt->sender_id = currentPid;
sigMgt->dest_id = currentPid;
sigMgt->size = size;
//这样搞的目的是sig给user用。sigMgt是os用的。隐藏了一些info
//根据sigMgt struct 是3个整数,+1,这样偏移3个整数的位置。然后强制转化成1个整数的指针。在加1就是1个指针的位移了
sig = (union SIGNAL*)(sigMgt + 1);
sig->sigNo = sigNo;
memAlloc++;
return sig;
}
void free_buf(union SIGNAL** psig)
{
if (*psig == NULL)
{
redundant_free(psig);
return;
}
if (memAlloc == 0)
{
printf("\n*********MEMORY ALLOC/FREE Error ***********\n");
CPPUNIT_ASSERT(0);
return;
}
memAlloc--;
//和alloc 匹配,所以要-1
//虽然psig是1个整数大小。但是强制转成了3个整数大小的struct。然后-1,这样就回退3个整数大小的space
_signal* sigMgt = ((_signal*) *psig) - 1;
free(sigMgt);
*psig = NULL;
}
void send(union SIGNAL** psig, PROCESS p)
{
union SIGNAL* sig = *psig;
#ifdef SIG_CLONE
sig = sig_clone_and_free(sig);
#endif
pthread_mutex_lock(&sigqueue_mutex);
_signal* sigMgt = ((_signal*) sig) - 1;
sigMgt->dest_id = p;
sigMgt->sender_id = currentPid;
sig_queues[p].push_back(sigMgt);
*psig = NULL;
pthread_mutex_unlock(&sigqueue_mutex);
}
0 0
- os send,receive 实现
- send,receive
- send receive jrtplib3
- udp socket send /receive sample
- 关于Socket.Receive()与Send()的常见问题
- rtp send receive
- [WF4.0 实战] WF4.0 Receive && Send
- TCP之(send and receive information)
- HOWTO: Receive/Send Multicasts Under WinNT/Win95 Using WinSock
- PDU maxsize receive and send DVT trace blog
- C# Socket 使用send,Receive方法请人指导下..
- 第4章中的实验,send和receive
- CString、char*互转 对receive和send的理解
- Napatech card config(Send Data or Receive Data)
- js new Open window vaule send and receive get Problem
- sas协议之spc4中的receive diagnostic 和send diagnostic
- snmp v3 trap(send and receive use net-snmp)
- Udp Send(发送端)与Receive(接收端) 基本原理
- git学习
- Linux 如何查看进程的各线程的CPU占用
- 公共技术点之 Java 反射 Reflection
- 深入FFM原理与实践
- HDOJ-1754 I Hate It
- os send,receive 实现
- Swift UIColor Extension (扩展)
- 二维数组的传参问题!!!
- 获取腾讯企业邮箱通讯录python脚本(带登录功能)
- linux编译器之再谈vim入门
- Linux Vi 删除全部内容,删除某行到结尾,删除某段内容 的方法
- 基础7
- CODE[VS] 1068 乌龟棋
- 高级语言的编译:链接及装载过程介绍