- 如何判断一个单链表有环,设置2个指针,一个快一个满
- 二叉树先序遍历、中序遍历、后续遍历,根据2个确定一个
- 线程互斥锁、条件锁的生产者消费者
- gdb 调试全面掌握
- 排序
- 父子进程之间的最优通信方式
- 哈希
- pthread_self() pthread_…
- epoll ET LT
- 父进程如何获取退出状态
- 写个 Deamon
- EAGAIN EINTR send recv read write
- 惊群
- errno 为全局变量,为什么多线程不用加锁
在支持线程的环境中,多个线程共享进程地址空间,每个线程都有属于它自己的局部 errno 以避免一个线程干扰另一个线程。
对于 errno 应当知道两条规则。
- 如果没有出错,则其值不会被一个例程清除。因此,仅当函数的返回值指明出错时,才检验其值。
- 任一函数都不会将 errno 值设置为 0,在 <errno.h> 中定义的所有常量都不为 0。
- __VA_ARGS__ 是一个可变参数的宏,这个可宏是新的C99规范中新增的,目前似乎 gcc 和 VC6.0 之后的都支持(VC6.0 的编译器不支持)。宏前面加上 ## 的作用在于,当可变参数的个数为 0 时,这里的 ## 起到把前面多余的 “,” 去掉的作用。
- __FILE__ 宏在预编译时会替换成当前的源文件名
- __LINE__ 宏在预编译时会替换成当前的行号
- __FUNCTION__ 宏在预编译时会替换成当前的函数名称
- recv read 返回0