您的位置:首页 > 其它

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: