我一直认为只会if(p != NULL){..}做这项工作.但在阅读Stack Overflow问题后,似乎没有.
那么在吸收了那个说明NULL指针可能具有非零值的问题的所有讨论之后检查NULL指针的规范方法是什么?
调用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)
在这种情况下,如何继续调试子进程?
我正在阅读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中具有价值?
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个字节,还是依赖于字节序?
有些理由值得赞赏.
我在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),不async和nonblocking一样的东西?
根据这个答案的评论,引用的引用主要是为了支持运算符重载,引用Bjarne Stroustrup:
引用的引用主要是为了支持运算符重载.C按值传递每个函数参数,并且按值传递对象的效率低或不合适,用户可以传递指针.在使用运算符重载的情况下,此策略不起作用.在这种情况下,符号方便是必不可少的,因此如果对象很大,则不能期望用户插入操作符的地址.
这意味着运算符重载无法使用指针.但它没有清楚地解释为什么运算符重载指针无法工作.为什么运算符重载不能用于指针?
IMO使用引用,指针也可以在其位置使用.
如果在呼叫时没有设置中的信号未决,则该线程将被暂停,直到一个或多个信号等待.由set定义的信号在调用sigwait()时应被阻止; 否则,行为未定义.未指定sigwait()对set中信号的信号动作的影响.
这真的很模糊,这里pending和block这里有什么区别?
关于如何选择sigwait和sigaction不清楚的结论:
总之,当响应异步信号运行的代码需要通知线程时,应该使用sigwait()来处理信号.或者,如果实现提供信号量,它们也可以在sigwait()之后使用,或者在先前使用sigaction()注册的信号处理例程中使用.
有人可以说理性sigwait更合理吗?
看来维基上的定义并不准确:
http://en.wikipedia.org/wiki/Red-black_tree#Properties
所有黑色节点的树是红黑树吗?
UPDATE
由于rbtree的定义不那么严格,我们如何决定是将黑色节点的子节点打印为红色还是黑色?
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 ×8
gdb ×2
asyncsocket ×1
c++ ×1
fork ×1
linux ×1
nonblocking ×1
null-pointer ×1
pointers ×1
reference ×1
signals ×1
umask ×1
unions ×1
variables ×1