fork有下面两中用法:(1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中很常见——父进程等待客户端的服务请求。当请求达到时,父进程调用fork,子进程处理此请求。父进程继续等待下一个服务请求。(2)一个进程要执行一个不同的程序,这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec。父、子进程虽然共享正文段,但子进程获得父进程数据空间、堆和栈的副本。由于在fork之后经常跟随exec,所以,为了解决这种复制又被覆盖的低效问题,出现了写时复制(Copy-On-Write, COW)技术,所有的区域由父子进程共享,子进程的虚拟地址指向父进 Read More
其实二者的区别还是很大的,首先strlen计算的长度不包括字符串最后的终止null字节,而sizeof则计算包括终止null的缓冲区长度。还有一点很容易被忽略,strlen需要一次函数调用,即它是个函数,而sizeof是个运算符,缓冲区已用已知字符进行了初始化,其长度是固定的,所以,sizeof在在编译时计算时缓冲区的长度。因而,大神总是忠告我们,不要将strlen写入循环体内,可sizeof没有这方面的考虑。 Read More