IM 问题归纳
2010-04-15 00:18
162 查看
1 当接收处理机 接收包,插入消息队列时发生死锁
先对信号量操作 sem_wait( &msgNonEmpty);当队列未满时进行写入操作,否则阻塞
访问队列pthread_mutex_lock(&queue)
sem_post(&msgNonFull) 释放队列资源
pthread_mutex_unlock(&queue) 释放队列锁
简单的读写者模型
struct msglist{
struct command head;
struct command * tail;
}
2 strchr 返回查询到字符的位置,未查询到返回NULL
3设置SO_BROADCAST选项
我们现在还没有讨论到使用UDP进行广播的主题。然而,我们很容易意识到广播功能的误用以及所造成的网络灾难。为了避免在没有计划广播时进行广播,套接口禁用了广播功能。如果确实需要广播,那么C程序员要为套接口的这个功能处理相应的麻烦。
SO_BROADCAST是一个布尔标志选项,由int数据类型进行设置。下面的例子显示了如何设置SO_BROADCAST选项:
#define TRUE 1
#define FALSE 0
int z; /* Status code */
int s; /* Socket s */
int so_broadcast;
...
so_broadcast = TRUE;
z = setsockopt(s,
SOL_SOCKET,
SO_BROADCAST,
&so_broadcast,
sizeof so_broadcast);
if ( z )
perror("setsockopt(2)");
如果要setsockopt函数返回零,套接口s已经允许进行广播。然而在这里要注意的是所选用的套接口类型必须具有广播功能,例如UDP套接口。
4 指针的指针使用细节
通常我们使用指针作为入参,c中值传递,将该指针传递过去,修改指针指向的内容,则外层指针也会受到影响
一位两个指针指向同一地址,有些象硬引用
一个指针的指针作为入参使用
函数中指针的指针内容可以被赋值, 外层函数的指针内容会发生改变,
如果其他数据指向原指针,则指向并未改变。而存放原指针的指针变量已经是新值了,如果不将指向原指针的数据结构重新定向
则新的计算结果丢失
例如
typedef struct node{
int value;
struct node * next;
} *Node;
Node cur;
Node root;
cur = root->next; //cur = 0x0001 &cur = 0x1001
handle_node( &cur); //指针的指针 &cur=0x1001 cur=0x0002变量还是这个,指向
root->next = cur; //root->next 0x0001 所以要重新赋值
sub handle_node( Node * node);
先对信号量操作 sem_wait( &msgNonEmpty);当队列未满时进行写入操作,否则阻塞
访问队列pthread_mutex_lock(&queue)
sem_post(&msgNonFull) 释放队列资源
pthread_mutex_unlock(&queue) 释放队列锁
简单的读写者模型
struct msglist{
struct command head;
struct command * tail;
}
2 strchr 返回查询到字符的位置,未查询到返回NULL
3设置SO_BROADCAST选项
我们现在还没有讨论到使用UDP进行广播的主题。然而,我们很容易意识到广播功能的误用以及所造成的网络灾难。为了避免在没有计划广播时进行广播,套接口禁用了广播功能。如果确实需要广播,那么C程序员要为套接口的这个功能处理相应的麻烦。
SO_BROADCAST是一个布尔标志选项,由int数据类型进行设置。下面的例子显示了如何设置SO_BROADCAST选项:
#define TRUE 1
#define FALSE 0
int z; /* Status code */
int s; /* Socket s */
int so_broadcast;
...
so_broadcast = TRUE;
z = setsockopt(s,
SOL_SOCKET,
SO_BROADCAST,
&so_broadcast,
sizeof so_broadcast);
if ( z )
perror("setsockopt(2)");
如果要setsockopt函数返回零,套接口s已经允许进行广播。然而在这里要注意的是所选用的套接口类型必须具有广播功能,例如UDP套接口。
4 指针的指针使用细节
通常我们使用指针作为入参,c中值传递,将该指针传递过去,修改指针指向的内容,则外层指针也会受到影响
一位两个指针指向同一地址,有些象硬引用
一个指针的指针作为入参使用
函数中指针的指针内容可以被赋值, 外层函数的指针内容会发生改变,
如果其他数据指向原指针,则指向并未改变。而存放原指针的指针变量已经是新值了,如果不将指向原指针的数据结构重新定向
则新的计算结果丢失
例如
typedef struct node{
int value;
struct node * next;
} *Node;
Node cur;
Node root;
cur = root->next; //cur = 0x0001 &cur = 0x1001
handle_node( &cur); //指针的指针 &cur=0x1001 cur=0x0002变量还是这个,指向
root->next = cur; //root->next 0x0001 所以要重新赋值
sub handle_node( Node * node);
相关文章推荐
- CSS浏览器兼容性与解析问题终极归纳
- 对于IOS多线程问题的总结与归纳
- C#/SQL Server系统开发常见问题归纳
- 手机游戏开发过程中需重视解决的问题归纳
- 使用getWindow().addFlags( WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);其他编辑框不能正常编辑问题
- svn -------连接不上问题归纳
- Sharepoint开发问题归纳(不断更新)
- Sharepoint开发问题归纳(不断更新)
- Java集合元素ArrayList删除某一项问题及ArrayList总结归纳
- maven常见问题归纳
- 【转载】Sharepoint开发问题归纳
- OPNET半实物仿真安装与调试遇到的问题归纳与整理
- 关于nginx+cgi+cJSON在CentOS虚拟机上将c文件编译成cgi文件遇到的问题归纳
- [置顶] ubuntu 环境搭建问题归纳
- 橄榄山BIM大学论坛正式启用,有Revit二次开发专版。可去那里问问题 http://bbs.glsbim.com
- 移动端IM开发需要面对的技术问题
- .net面试问题归纳
- im 聊天输入框高度问题
- vc开发windows程序时的字符串问题的一个归纳(原创)
- MFC开发平台升级中遇到的问题归纳