小编cpu*_*uer的帖子

打印所有全局变量/局部变量?

如何打印所有全局变量/局部变量?这可能在gdb中吗?

c variables gdb global-variables

310
推荐指数
3
解决办法
24万
查看次数

我们如何检查指针是否为NULL指针?

我一直认为只会if(p != NULL){..}做这项工作.但在阅读Stack Overflow问题后,似乎没有.

那么在吸收了那个说明NULL指针可能具有非零值的问题的所有讨论之后检查NULL指针的规范方法是什么?

c null-pointer

42
推荐指数
5
解决办法
13万
查看次数

如何在gdb中的fork()之后调试子进程?

调用fork后,当前进程将调用exit(0).

但孩子会继续.

switch(fork())
{
  case -1:
    exit(1);
  case 0:
    //child process,continue
    break;
  default:
    //the current process,exit
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何继续调试子进程?

c gdb fork

26
推荐指数
1
解决办法
2万
查看次数

未初始化的整数在c中始终默认为0吗?

我正在阅读nginx的源代码并发现它没有初始化许多数值变量,包括ngx_int_t ngx_last_process;,这里ngx_int_t定义为long int

#if 0
    ngx_last_process = 0;
#endif
Run Code Online (Sandbox Code Playgroud)

那么@Igor Sysoev认为没有必要进行初始化?

但是在程序中它假定默认值是0:

    for (s = 0; s < ngx_last_process; s++) {
        if (ngx_processes[s].pid == -1) {
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

是否保证未初始化的变量0在c中具有价值?

c initialization default-value

22
推荐指数
3
解决办法
2万
查看次数

不同规模成员联合的记忆布局?

typedef union epoll_data
{
  void        *ptr;
  int          fd;
  __uint32_t   u32;
  __uint64_t   u64;
} epoll_data_t;
Run Code Online (Sandbox Code Playgroud)

这里int__uint32_t4个字节,而其他8个字节.

当我们设置fd为a时int,它是位于前4个字节还是后4个字节,还是依赖于字节序?

有些理由值得赞赏.

c unions

20
推荐指数
1
解决办法
8871
查看次数

unix socket中的异步和非阻塞有什么区别?

我在nginx中看到这样的代码:

if(fcntl(ngx_processes[s].channel[0], F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK) == -1) {
...
if (ioctl(ngx_processes[s].channel[0], FIOASYNC, &on) == -1) {
...
Run Code Online (Sandbox Code Playgroud)

谁能告诉我什么是之间的区别fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK)ioctl(s, FIOASYNC, &on),不asyncnonblocking一样的东西?

c network-programming nonblocking asyncsocket

18
推荐指数
1
解决办法
6177
查看次数

为什么运算符重载指针不允许工作?

根据这个答案的评论,引用的引用主要是为了支持运算符重载,引用Bjarne Stroustrup:

引用的引用主要是为了支持运算符重载.C按值传递每个函数参数,并且按值传递对象的效率低或不合适,用户可以传递指针.在使用运算符重载的情况下,此策略不起作用.在这种情况下,符号方便是必不可少的,因此如果对象很大,则不能期望用户插入操作符的地址.

这意味着运算符重载无法使用指针.但它没有清楚地解释为什么运算符重载指针无法工作.为什么运算符重载不能用于指针?

IMO使用引用,指针也可以在其位置使用.

c++ pointers language-design reference

15
推荐指数
2
解决办法
2万
查看次数

关于sigwait()的含糊描述

如果在呼叫时没有设置中的信号未决,则该线程将被暂停,直到一个或多个信号等待.由set定义的信号在调用sigwait()时应被阻止; 否则,行为未定义.未指定sigwait()对set中信号的信号动作的影响.

这真的很模糊,这里pendingblock这里有什么区别?

关于如何选择sigwaitsigaction不清楚的结论:

总之,当响应异步信号运行的代码需要通知线程时,应该使用sigwait()来处理信号.或者,如果实现提供信号量,它们也可以在sigwait()之后使用,或者在先前使用sigaction()注册的信号处理例程中使用.

有人可以说理性sigwait更合理吗?

c linux signals

15
推荐指数
1
解决办法
1万
查看次数

所有黑色节点的树是红黑树吗?

看来维基上的定义并不准确:

http://en.wikipedia.org/wiki/Red-black_tree#Properties

所有黑色节点的树是红黑树吗?

UPDATE

由于rbtree的定义不那么严格,我们如何决定是将黑色节点的子节点打印为红色还是黑色?

red-black-tree data-structures

9
推荐指数
2
解决办法
9486
查看次数

umask()什么时候有用?

umask(0);

fd = open("/dev/null", O_RDWR);
Run Code Online (Sandbox Code Playgroud)

这是man 2 umask:

umask() sets the calling process’s file mode creation mask (umask) to mask & 0777.
Run Code Online (Sandbox Code Playgroud)

但它对我来说没有意义,因为当我们打电话时open,我们也会提供一个模式参数.

那有什么意义umask呢?

c umask

8
推荐指数
2
解决办法
2万
查看次数