IM 问题归纳

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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值