Category: 程序设计

C/CPP, 程序设计

关于Visual Studio C LANG下pow()函数的重载

当初看到Visual Studio 2010的这个提示,我真当VS实现了C LANG的函数重载。 今天即兴尝试VS下C LANG的函数重载,虽然IDE没报语法错误,但编译器编译时会报错。无奈之下只好打开长长的math.h一探究竟。 通过全文搜索很容易找到math.h声明的pow()原型:

声明的这些原型一眼看上去没什么问题,挺正常的重载方式。不过math.h内容有点多,不细心点还是看不出来,实际上pow()的重载使用了条件编译:

查找了一下资料,得知” […]

Read more
PHP, 程序设计

PHP线程安全与非线程安全版本的本质区别

在百度上搜“PHP 线程安全 非线程安全”,你肯定会找到这种话: 感觉这个没解释到点上。   线程和进程最大的根本区别就是内存数据的共享。 每个进程都独享一个虚拟内存[虚拟内存 = 物理内存 + SWAP/页面文件)]。 一个进程可以拥有多个线程,一般来说一个线程仅独享一个进程的虚拟内存中的一个函数栈帧。   程序储存数据有下面几种常用的方式: 自动变量: 自动变量是储存在栈中的,随着函数的调用而产生,结束而销毁。 静态(全局)变量: 静态分配的变量是随着程序的运行产生,程序的结束而销毁,这些变量储存在内存一个专门存放静态变量的区域。 堆: 即通过malloc()申请的内存 […]

Read more
C/CPP

为何C语言函数可以返回struct

struct可由多个数据类型构成,初步看起来应该类似数组,变量本身是一个指向首字节的指针,无法直接通过此指针赋值struct,在函数中声明为自动变量时,也无法返回此指针所指向的值。 但事实上就并非如此,struct之间可以直接赋值,使用指针指向其地址时需要使用”&”,函数中声明为自动变量时可以直接return其值。 那struct变量本身到底是何? 写了这样一个东西,运行后瞬间明白:

struct变量就和基本类型,int, char等一样,直接指向其值,而且struct有多少字节,那个值就有多少字 […]

Read more
C/CPP, Unix Like, 操作系统, 程序设计

Linux chroot Shell —— 简单chroot指定用户

对于Linux服务器,有时需要开放登录权限给一部分用户,但并非所有用户都愿意安分守己,也无法知道谁是不安分守己的,给多一个这些用户开放登录权限,系统的威胁就多了一分。 目前来说比较好的方案是chroot,调用了chroot(),就能把的根目录改成指定的根目录。何为根目录?顾名思义,“根”就是所有目录的“根”,一切目录均从“根”而生,没有“根”就没有其他目录,换句话说,“根目录”就是最原始的目录。你无法访问“根”之前前的数据,没有“根”的时候,怎么可以发展数据呢? 二进制程序chroot乃GNU的核心程序中的一个,Linux发行版本一般都有Coreutils,不过二进制版的chroot在这种情况 […]

Read more 1 Comment
C/CPP, PHP

[PHP模块开发]获取单次请求所耗的CPU时间

数天前与一个学校中的朋友闲聊,对方提到了使用Hostker的经历,涉及到了一项“按CPU时间”计费的功能。 个人来说,是挺欣赏这一项收费策略的,毕竟有多少个使用虚拟主机的用户,就有多少种不同资源需求量,按照PHP对CPU资源的使用情况来计费,不仅实现公平收费,还能逼那些让资源占用多的用户占得谨慎点,比用CloudLinux的那些逼格高得多哈!   既然如此,就自己来动手实现一个。 计算CPU时间,并不难实现,Unix Like有提供这一个系统调用,所以嘛,根本不需要你自己计算…… 我所知道相关的系统调用有两个,以下是他们的函数原型: [crayon-662b728ac92066569 […]

Read more